ASP.NET Метод MVC Post: свойства модели не сохраняют значение

#c# #.net #asp.net-mvc

#c# #.net #asp.net-mvc

Вопрос:

У меня есть 2 ASP.NET Методы действий MVC, я вызываю первый метод, передавая и загружая некоторые исходные данные, затем я получаю некоторые дополнительные сведения из пользовательского интерфейса и вызываю второй метод действия ( метод Post действия из .cshtml ). Данные, которые я получил от первого вызова, отсутствуют в методе post. кто-нибудь может мне помочь, что я делаю не так или чего здесь не хватает?

Методы действий:

 [Route("setprofile")]
public ActionResult SetProfile(string id)
{
    ProfileData data = new ProfileData();
    //do something
    data.name= getData(id);
    return this.View(data);
}

[Route("setprofile")]
[HttpPost]
public ActionResult SetProfile(ProfileData data)
{
    // Here I'm not missing the data.name field value
}
  

Просмотр .cshtml файла:

 <div class="panel-body">
@using (Html.BeginForm("SetProfile", "Home", FormMethod.Post))
{
<div>
    <h3> Name: @(this.Model.name)</h3>
</div>
<h3>
    Comments:@Html.TextBoxFor(m => m.comments)
</h3>
}
  

Я получаю значение комментариев, но не получаю значение поля name из модели здесь.

Примечание: мне нужно отобразить значение, которое я получил от первого метода действия, в виде метки, а не текстового поля.

Ответ №1:

Есть две вещи: имя записывается как текст, и для отправки обратно на сервер вам нужно поместить его внутри элемента ввода.

ЕСЛИ вы не хотите показывать, это @Html.HiddenFor(m => m.name) создает скрытый элемент ввода.

Кроме этого, проверьте ModelState наличие ошибок проверки..

 if (!ModelState.IsValid)
     return BadRequest(ModelState);

.... your code here
  

если ваша модель недействительна, ProfileData возвращается результат

Ответ №2:

Вы не добавили input элемент, который будет отправлен обратно на сервер при отправке формы. Если вы не хотите, чтобы оно было видимым, пока оно все еще публикуется, добавьте для него скрытое поле:

 @Html.HiddenFor(m => m.name)
  

Без этого все, что вы делаете, это визуализируете name разметку, но после отправки формы она не будет отправлена обратно. В качестве альтернативы, вы можете отобразить текстовое поле для значения при установке его readonly атрибута. Это позволило бы ему быть видимым, не изменяться и по-прежнему отправляться обратно на сервер.

 @Html.TextBoxFor(m => m.name, new { @readonly = "readonly" })