0

我正在开发类似于以下内容的安全指标页面:- 在此处输入图像描述

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

@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");
        }

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

4

1 回答 1

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
            }
        });
});

然后在您的操作方法中创建一个类,该类具有您在 javascript 上的 SavePermissions 中放置的每个项目的属性,甚至应该将其称为 SavePermissions

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

*编辑:* 我之前没有考虑过这一点,但是我们在我们的应用程序中引用了 Newtonsoft.Json,您可能需要它来执行此操作...

于 2013-07-18T18:01:09.140 回答