从部分视图向控制器提交表单时模型为空

时间:2014-12-01 05:49:10

标签: c# asp.net-mvc-4 partial-views

我在尝试将模型从局部视图传递给控制器​​以进行进一步处理时遇到问题。

这是我的控制者:

public ActionResult Index()
{
    IList<ActionRoleEntity> permissionCollection = new SecurityManager().GetPermissionCollection();

    var model = new PermissionsModel
    {
        PermissionCollection = permissionCollection
    };
    return View(model);
}    

我的索引视图中的这个。正如您所看到的那样包括部分视图_Permissions。

@model WebApp.ViewModels.PermissionsModel
<script>
    $(document).ready(function () {
        $('#AdminTabs').tabs();
    });
</script>
<div id="AdminTabs">
    <ul>
        <li><a href="#tabs-1">Permissions</a></li>
        <li><a href="#tabs-2">Insights</a></li>        
    </ul>    
    <div id="tabs-1">        
        @{ Html.RenderPartial("_Permissions"); }
    </div>  
    <div id="tabs-2">
        <p>            
        </p>
    </div>
</div>

这是我的部分观点:

@model WebApp.ViewModels.PermissionsModel
@using (Html.BeginForm("Permissions", "Admin", FormMethod.Post))
{
    <table id="example" class="display">
    <thead>
        <tr>
            <th>Role</th>
            <th>Workflow</th>
            <th>Stage</th>
            <th>Action</th>            
            <th>Read</th>
            <th>Update</th>
            <th></th>
        </tr>
    </thead>    
    <tbody>
        @for (var i = 0; i < Model.PermissionCollection.Count; i++)
        {
            <tr>
                <td>@Html.DisplayTextFor(m => m.PermissionCollection[i].RoleName)</td>
                <td>@Html.DisplayTextFor(m => m.PermissionCollection[i].Workflow)</td>
                <td>@Html.DisplayTextFor(m => m.PermissionCollection[i].StageName)</td>
                <td>@Html.DisplayTextFor(m => m.PermissionCollection[i].ActionName)</td>                
                <td>@Html.CheckBoxFor(m => m.PermissionCollection[i].Get)</td>
                <td>@Html.CheckBoxFor(m => m.PermissionCollection[i].Post)</td>
                <td>@Html.HiddenFor(m => m.PermissionCollection[i].hasChanged)</td>
            </tr>
        }
    </tbody>
    </table>
    <input type="submit" id="btnSubmit" name="btnSubmit" value="Save" />    
}

为控制器正确填充模型,并且渲染局部视图中的html代码没有任何问题。但是,当我通过单击_permissions Partial View中的提交按钮提交表单时...方法&#34;权限&#34;在控制器&#34;管理员&#34;处理该操作会收到一个空的&#34; PermissionModel&#34;模型。

这是该操作的代码:

[HttpPost]
public ActionResult Permissions(PermissionsModel permissionsModel)
{
    IList<ActionRoleEntity> actionRoleEntity = permissionsModel.PermissionCollection.Where(m => m.hasChanged == true).ToList<vw_ActionRoleEntity>();

    // Save changed permission to database

    return View("Index");
}

最后,这就是对权限模型进行编码的方式:

public class PermissionsModel
{        
    public IList<ActionRoleEntity> PermissionCollection { get; set; }
}

Javascript更新ActionRoelEntity的hasChanged属性。

$("#example input[type='checkbox'").change(function () {
        var arrayCheckboxId = $(this).attr('id').split('_');
        var index = arrayCheckboxId[2]; // Gets specific row Id.
        $('#PermissionCollection_' + index + '__hasChanged').val(true);
    });

如果你看到我可能遗失的东西,请提供建议。

1 个答案:

答案 0 :(得分:2)

在Post方法和视图中查看模型的名称。我看到您在视图@ 模型 WebApp.ViewModels.PermissionsModel上调用模型,在lambda分配中模型为 m ,并且在post方法上为 permissionsModel 即可。将它更改为两个地方的模型