Использование скрытых полей во время публикации 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
}

Надеюсь, это поможет.

Другие вопросы по тегам