ASP.NET MVC,將模型從視圖傳遞到控制器 (ASP.NET MVC, passing Model from View to Controller)


問題描述

ASP.NET MVC,將模型從視圖傳遞到控制器 (ASP.NET MVC, passing Model from View to Controller)

I'm having trouble with ASP.NET MVC and passing data from View to Controller. I have a model like this:

 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; }
 }

I create this InputModel in my Controller and pass it to the View:

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

In my Input.cshtml file I then have some code to generate the input form:

@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" />
}

Now when I click on the submit button, I want to work with the data that was put into the textfields.

QUESTION 1: I have seen this @Html.TextBoxFor(), but I don't really get this "stuff => otherstuff". I concluded that the "otherstuff" should be the field where I want to have my data written to, in this case it would probably be "p.value". But what is the "stuff" thing in front of the arrow?

Back in the Controller I then have a function for the POST with some debug:

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

  return View(m);
}

Here the Debug only shows something like:

{"axProc":[]}
COUNT: 0

So the returned Model I get is empty.

QUESTION 2: Am I doing something fundamentally wrong with this @using(Html.BeginForm())? Is this not the correct choice here? If so, how do I get my model filled with data back to the controller?  (I cannot use "@model List< Process >" here (because the example above is abbreviated, in the actual code there would be more stuff).)

I hope someone can fill me in with some of the details I'm overlooking.


參考解法

方法 1:

Change your view to some thing like this to properly bind the list on form submission.

@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" />
}

方法 2:

  1. In @Html.TextBoxFor(stuff => otherstuff) stuff is your View's model, otherstuff is your model's public member.
  2. Since in the View you want to render input elements for the model member of a collection type (List), you should first create a separate partial view for rendering a single item of that collection (Process). It would look something like this (name it Process.cshtml, for example, and place into the /Views/Shared folder):

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

Then, your main View would look like this:

@model PROJ.Models.InputModel

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

Also, check that the loadInputModel() method actually returns something, e.g. not an empty list.

(by Cabadathtkt986m1kael)

參考文件

  1. ASP.NET MVC, passing Model from View to Controller (CC BY-SA 3.0/4.0)

#controller #ienumerable #html.beginform #asp.net-mvc






相關問題

覆蓋我的控制器,我應該在哪個事件中檢查 cookie? (Overriding my controller, which event should I check for a cookie in?)

ASP.NET MVC,將模型從視圖傳遞到控制器 (ASP.NET MVC, passing Model from View to Controller)

Ruby on Rails:更改列表順序後未顯示錯誤消息 (Ruby on Rails: Error messages not displaying since changing order of a list)

Успадкоўванне кантролера ASP.NET MVC 4 (ASP.NET MVC 4 controller inheritance)

如何在 CakePHP 中創建自定義 MySQL 查詢? (How to create custom MySQL queries in CakePHP?)

Respond_to 沒有調用正確的格式 (Respond_to does not call the right format)

Rails - 尋找錯誤 ID 的 JSON 回調 (Rails - JSON callback looking for wrong id)

YIi PHP - 帶有 foreach 循環的輸出數組 (YIi PHP - Output array with a foreach loop)

使用 SQL 將方法邏輯移動到 Rails 項目中的模型 (Moving method logic with SQL to model in rails project)

MVC 為什麼要單元測試控制器 (MVC Why unit test controllers)

Jquery & Rails 3:從 js 文件運行控制器操作? (Jquery & Rails 3: Run controller action from js file?)

.net core mvc:在區域上添加具有 crud 功能的控制器未正確生成代碼和鏈接 (.net core mvc: adding controller with crud functionality on area didn't generate code and link correctly)







留言討論