asp.net-mvc - контроллер - metanit c#



ASP.NET MVC, передача модели из представления в контроллер (2)

  1. В @ Html.TextBoxFor (stuff => otherstuff) материал - это ваша модель View, другой - публичный член вашей модели.
  2. Поскольку в представлении вы хотите отображать элементы ввода для члена модели типа коллекции (List), сначала вы должны создать отдельный частичный вид для рендеринга одного элемента этой коллекции (Process). Он будет выглядеть примерно так (назовите его Process.cshtml, например, и поместите в папку / Views / Shared):

    @model List<PROJ.Models.Process>
    
    @Html.TextBoxFor(model => p.value)

Затем ваш основной вид будет выглядеть так:

@model PROJ.Models.InputModel

@using(Html.BeginForm()) {
  foreach(PROJ.Models.Process p in Model.axProc){
    @Html.Partial("Process", p)
  }
  <input type="submit" value="SEND" />
}

Кроме того, убедитесь, что метод loadInputModel () фактически возвращает что-то, например, не пустой список.

У меня возникают проблемы с ASP.NET MVC и передача данных из View в Controller. У меня есть такая модель:

 public class InputModel {
   public List<Process> axProc { get; set; }

   public string ToJson() {
     return new JavaScriptSerializer().Serialize(this);
   }
 }

 public class Process {
   public string name { get; set; }
   public string value { get; set; }
 }

Я создаю этот InputModel в своем контроллере и передаю его в View:

public ActionResult Input() {
  if (Session["InputModel"] == null)
    Session["InputModel"] = loadInputModel();
  return View(Session["InputModel"]);
}

В моем файле Input.cshtml у меня есть код для создания входной формы:

@model PROJ.Models.InputModel

@using(Html.BeginForm()) {
  foreach(PROJ.Models.Process p in Model.axProc){
    <input type="text" />
    @* @Html.TextBoxFor(?? => p.value) *@
  }
  <input type="submit" value="SEND" />
}

Теперь, когда я нажимаю кнопку отправки, я хочу работать с данными, которые были помещены в текстовые поля.

ВОПРОС 1: Я видел это @ Html.TextBoxFor (), но на самом деле я не получаю этот «stuff => otherstuff». Я пришел к выводу, что «otherstuff» должен быть полем, на котором я хочу записать свои данные, в этом случае это, вероятно, будет «p.value». Но что такое «штука» перед стрелкой?

Вернемся в контроллер. Затем у меня есть функция POST с некоторой отладкой:

[HttpPost]
public ActionResult Input(InputModel m) {
  DEBUG(m.ToJson());
  DEBUG("COUNT: " + m.axProc.Count);

  return View(m);
}

Здесь Debug показывает только что:

{"axProc":[]}
COUNT: 0

Таким образом, возвращаемая модель, которую я получаю, пуста.

ВОПРОС 2: Я делаю что-то принципиально неправильно с этим @using (Html.BeginForm ())? Это не правильный выбор здесь? Если да, то как я могу вернуть свою модель к данным на контроллер?
(Я не могу использовать «@model List <Process>» здесь (потому что приведенный выше пример сокращен, в фактическом коде будет больше вещей).)

Надеюсь, кто-то может заполнить меня некоторыми деталями, которые я просматриваю.


Измените свой вид на что-то подобное, чтобы правильно привязать список к отправке формы.

@using(Html.BeginForm()) {
  for(int i=0;i<Model.axProc.Count;i++){
   <span>
    @Html.TextBoxFor(model => model.axProc[i].value)
</span>
  }
  <input type="submit" value="SEND" />
}




html.beginform