在HTTP post期间使用隐藏字段重新加载同一页面回发

时间:2013-07-12 13:19:47

标签: asp.net-mvc-3 entity-framework hidden-field html.beginform html.hiddenfor

我有一个视图,用户可以在该视图中留下有关页面上正在播放的内容视频的反馈评论。使用以下代码,我可以手动输入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返回了一个未被设置为对象实例的错误

有人可以帮助我了解如何使用我在帖子之前的模型中的值将这些值传递到同一页面。

1 个答案:

答案 0 :(得分:1)

给出以下视图模型(部分):

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
}

我希望这会有所帮助。