将一组模型发布到控制器

时间:2015-03-13 09:04:24

标签: c# asp.net asp.net-mvc asp.net-mvc-5

我有一个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中的错误还是我做了一些可怕的错误?

1 个答案:

答案 0 :(得分:1)

MVC默认的Model Binder只会绑定属性与公共getter和setter。

您需要更改字段

public String ScopeVal;

是一个属性

public String ScopeVal { get; set; }

暴露类字段是不好的C# - 这就是属性的用途。