#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" })