我有一个包含自定义类型列表的模型。
我希望在模型作为HttpPost
调用控制器时提交此类型的数据。
然而,它似乎没有做我想要的。通过跟踪Passing IEnumerable or list Model to Controller using HttpPost到目前为止,我已经到了目前为止,但我遇到了问题。
我的控制器方法:
[HttpPost]
public ActionResult UpdateStock(int id, ProductModel model)
{
return View("UpdateStock", model);
}
现在,View就像这样(修剪过):
@using (Html.BeginForm())
{
<div>
<p>
<input type="submit" value="Save" />
</p>
@Html.HiddenFor(m => m.ProductNo)
<div class = "title">
@Html.LabelFor(m => m.ProductName)
@Html.EditorFor(m => m.ProductName)
</div>
@for ( int i = 0; i < Model.Stock.Count; i++ )
{
var item = Model.Stock[i];
<div class="editor-field">
<input type="text" name="Model.Stock[@i].Key"
value="@item.Key" />
</div>
<div class="editor-field">
<input type="text" name="Model.Stock[@i].Value"
value="@item.Value" />
</div>
}
}
我的问题是,似乎@Html.EditorFor()
和<input type=.../>
标签似乎并不能很好地相互配合。如果我像上面那样,那么使用ProductNo
方法的@Html
和其他属性将不会传递给模型。
任何建议都非常感谢。
答案 0 :(得分:2)
我只想使用编辑器模板:
型号:
public class ProductModel
{
public string ProductNo { get; set; }
public string ProductName { get; set; }
public IEnumerable<Stock> Stocks { get; set; }
}
public class Stock
{
public string Key { get; set; }
public string Value { get; set; }
}
控制器:
public class HomeController: Controller
{
public ActionResult Index()
{
var model = new ProductModel
{
ProductNo = "123",
ProductName = "p name",
Stocks = new[]
{
new Stock { Key = "key1", Value = "value1" },
new Stock { Key = "key2", Value = "value2" },
}
};
return View(model);
}
[HttpPost]
public ActionResult Index(ProductModel model)
{
...
}
}
查看:
@model ProductModel
@using (Html.BeginForm())
{
<p>
<input type="submit" value="Save" />
</p>
@Html.HiddenFor(m => m.ProductNo)
<div class = "title">
@Html.LabelFor(m => m.ProductName)
@Html.EditorFor(m => m.ProductName)
</div>
@Html.EditorFor(x => x.Stocks)
}
然后为Stock类型(~/Views/Shared/EditorTemplates/Stock.cshtml
)定义自定义编辑器模板:
@model Stock
<div class="editor-field">
@Html.EditorFor(x => x.Key)
</div>
<div class="editor-field">
@Html.EditorFor(x => x.Value)
</div>