我有一个MVC5项目,我试图将“权限”列表发回服务器。
@model List<ConnectConsole.Models.Permissions>
<form action="/products/@{@Html.Raw(Url.RequestContext.RouteData.Values["id"])}/permissions/save" method="POST">
@for (int i = 0; i < Model.Count; i++)
{
@Html.TextBoxFor(model => model[i].ConnectId)
@Html.DropDownListFor(
model => model[i].ScopeVal,
Model[i].ScopeTypes,
"-- Please Select --")
}
<button class="btn btn-full btn-submit">Save</button>
@* removed some html for brevity *@
</form>
回发到服务器的数据看起来像这样(从chrome复制)
[0].ConnectId:88709d85-710c-45da-8fec-0ee661d267b1
[0].ScopeVal:e276964f-7e6e-4aaf-8bf5-cac5b02f3a8f
[1].ConnectId:78709d85-710c-45da-8fec-0ee661d267b1
[1].ScopeVal:
[2].ConnectId:68709d85-710c-45da-8fec-0ee661d267b1
[2].ScopeVal:
我的C#模型
public class Permissions
{
public String ConnectId { get; set; }
public List<SelectListItem> ScopeTypes;
public String ScopeVal;
}
我发布到
的方法签名public ActionResult Save(string id, List<Permissions> permissions)
对象似乎正确地发布到服务器中,并且请求中包含所有字段,但在该方法中,从此数据中序列化的列表仅包含连接ID,它的大小正确,我得到一个列表其中有3个对象,但从未设置ScopeVal。
这是MVC中的错误还是我做了一些可怕的错误?
答案 0 :(得分:1)
MVC默认的Model Binder只会绑定属性与公共getter和setter。
您需要更改字段
public String ScopeVal;
是一个属性
public String ScopeVal { get; set; }
暴露类字段是不好的C# - 这就是属性的用途。