我有一个模型,它包含一个自定义类型的List。
当模型以HttpPost
调用控制器的形式提交时,我希望将此类型的数据传回。
然而,它似乎并没有达到我想要的效果。到目前为止,我已经通过使用HttpPost将IEnumerable或列表模型传递给控制器,但我遇到了一个问题。
我的控制器方法:
[HttpPost]
public ActionResult UpdateStock(int id, ProductModel model)
{
return View("UpdateStock", model);
}
现在,视图是这样的(修剪):
@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=.../>
标签之间的配合不太好。如果我有像上面那样的属性,那么使用@Html
方法的ProductNo
和其他属性将不会传递到模型中。
非常感谢任何建议。
我只需要使用编辑器模板:
型号:
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>