将单选按钮对象列表传递给我的操作方法

时间:2013-07-18 16:19:24

标签: asp.net asp.net-mvc

我正在开发类似于以下内容的安全矩阵页面: - enter image description here

目前我的视图中有以下代码: -

@foreach(var item in Model.PermisionLevel.OrderByDescending(a=>a.PermisionSize)){
<th>
</th>}
</tr>
 @{
int i =0 ;
foreach (var item2 in Model.TechnologyType.OrderBy(a=>a.Name)) { 
<tr>
<td class="f">
@item2.Name
</td>
@foreach (var item3 in Model.PermisionLevel.OrderByDescending(a=>a.PermisionSize))
       {
<td class="f">

                @Html.RadioButton(item2.Name, item3.PermisionLevelID)
                @Html.Hidden("AssetTypeID" , item2.AssetTypeID)
                @Html.Hidden("PermisionLevelID",item3.PermisionLevelID)
                @Html.Hidden("SecurityRoleID",Model.SecurityRole.SecurityRoleID)
             </td>
} 
</tr>
}
}         

以及以下ActionMethod: -

[HttpPost]
        public ActionResult AssignPermisionLevel(ICollection<SecurityroleTypePermision> list)
        {
            foreach (var c in list)
            {
                repository.InsertOrUpdateSecurityroleTypePermisions(c);
            }
            repository.Save();
            return RedirectToAction("Index");
        }

但是我不确定只有在检查了相关的单选按钮后我才能传递相关的隐藏字段值。目前如果我提交视图,action方法会引发null异常? 任何人都可以就如何解决这个问题提出建议吗?

1 个答案:

答案 0 :(得分:0)

每个广播组都有一个名称,类似于您的item2.Name。

// see if this group is selected
var radWebSite = $('[name="SomeName"]:checked');
if (radWebSite.length > 0) {
    // this group has a selection, get the value
    var WebSiteVal = radWebSite.val();
}

如果您将所有答案都记录到变量或某个对象中,可以将其传递给您的操作方法,这是一个建议

$('#SaveClick').click(function() {
    var SavePermissions = {};
    SavePermissions.WebSite = WebSiteVal // this is the variable from above
    // .... do this for each radio group

    var DTO = { 'DTO': SavePermissions };

    $.ajax({
            type: "POST",
            contentType: 'application/json;charset=utf-8',
            url: "/ControllerName/ActionMethodName",
            dataType: "json",
            data: JSON.stringify(DTO),
            success: function (data) {
                // do success stuff
            },
            error: function(data){
                // do error stuff
            },
            complete: function () {
                //do final stuff
            }
        });
});

然后在你的action方法中创建一个类,该类具有你在javascript上放在SavePermissions中的每个项目的属性,甚至可能应该称之为SavePermissions

public ActionResult AssignPermisionLevel(SavePermissions DTO){
    // save stuff
}

* 编辑:* 我以前没想过这个,但是我们在我们的应用程序中引用了Newtonsoft.Json,你可能需要这样做...