我有一个视图,用户可以在其中就页面上播放的内容视频留下反馈意见。使用以下代码,我可以手动输入UserID和ContentID,它可以毫无问题地保存到数据库中。
@using (Html.BeginForm("Screencast", "Media", FormMethod.Post, new { id = "form", enctype = "multipart/form-data" }))
{
<div class="row">
<div class="six columns">
<div class="row">
<div class="six columns">
@Html.LabelFor(c => c.FeedbackComment.UserID)
@Html.TextBoxFor(c => c.FeedbackComment.UserID)
</div>
<div class="six columns">
@Html.LabelFor(c => c.FeedbackComment.ContentID)
@Html.TextBoxFor(c => c.FeedbackComment.ContentID)
</div>
<div class="row">
<div class="twelve columns">
@Html.LabelFor(c => c.FeedbackComment.FeedbackString)
@Html.TextAreaFor(c => c.FeedbackComment.FeedbackString)
</div>
</div>
</div>
</div>
</div>
<input type="submit" value="Submit button" class="medium button bottom20"/>
}
然而,当用户在HTTP发布之前的页面上时,我的模型中实际上有相关的变量,称为:
Model.User.UserID
Model.SelectedItem.ContentID
我想把这些作为隐藏字段传递,但当我尝试这样做时:
@HtmlHiddenFor(c => c.FeedbackComment.UserID, @Model.User.UserID)
@HtmlHiddenFor(c => c.FeedbackComment.ContentID, @Model.SelectedItem.ContentID)
或
@HtmlHidden("UserID",@Model.User.UserID)
@HtmlHidden("ContentID",@Model.User.UserID)
然后,这些值将返回null,尽管在发布之前填充了这些值。我读到过一个手动放入输入标记的解决方法,但当我这样做时,@Using.HtmlBeginForm返回了一个未设置为对象实例的错误
有人能帮助我了解如何在发布之前使用模型中的值将这些值传递到同一页面吗。
给定以下视图模型(部分):
public class YourViewModel
{
public User User { get; set; }
public SelectedItem SelectedItem { get; set; }
}
您可以将这些属性绑定到隐藏的表单元素。当您发布回这些属性时,这些属性仍将包含其值。
@Html.HiddenFor(x => x.User.UserID)
@Html.HiddenFor(x => x.SelectedItem.ContentID)
你的行动方式:
public ActionResult YourActionMethod(YourViewModel viewModel)
{
// When you debug here you will see that the values are retained
}
我希望这能有所帮助。