Использование скрытых полей во время публикации HTTP для перезагрузки той же обратной передачи страницы
У меня есть просмотр, в котором пользователь может оставить отзыв о содержании видео, которое воспроизводится на странице. Используя следующий код, я могу вручную ввести 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)
Затем эти значения возвращаются нулевыми, несмотря на то, что значения заполняются до публикации. Я читал об обходном пути ввода тегов ввода вручную, но когда я сделал это, @Using.HtmlBeginForm возвращал ошибку, не указав экземпляр объекта
Может кто-нибудь, пожалуйста, помогите мне понять, как я могу передать эти значения на той же странице, используя значения, которые я имею в модели до публикации.
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
}
Надеюсь, это поможет.