1

如何制作那部分代码

        <ol>
            @foreach (var role in ViewBag.RolesForThisUser)
            {
                <li>@role <input type="hidden" name="DeleteRoleName" value="@role" /><input type="submit" value="Delete" name="action:DeleteRole" /></li>
            }
        </ol>

将我需要的内容发布到控制器。现在它发布了列表中的第一个角色(无论我点击哪个按钮)。通常我为每个列表选项做多个表单,但这次是在其他表单中的列表。我可以把表格变成表格吗?

一切都在一个帖子形式:

@using (Html.BeginForm("GetUserRoles", "Manage"))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    <p>
        Users: @Html.DropDownList("UserName", (IEnumerable<SelectListItem>)ViewBag.Users, "Select ...")
        <input type="submit" value="Get roles" name="action:GetUserRoles" />
    </p>

    if (ViewBag.RolesForThisUser != null)
    {
        <hr />
        <p>
            <text> Role name: </text>@Html.DropDownList("RoleName", (IEnumerable<SelectListItem>)ViewBag.Roles, "Select ...")
            <input type="submit" value="Add role" name="action:AddRole" />
        </p>

        <hr/>
        <p>
            <text>User roles:</text>
            <ol>
                @foreach (var role in ViewBag.RolesForThisUser)
                {
                    <li>@role <input type="hidden" name="DeleteRoleName" value="@role" /><input type="submit" value="Delete" name="action:DeleteRole" /></li>
                }
            </ol>
        </p>
    }

    if (ViewBag.Action != null)
    {
        <hr />
        <p>
            @ViewBag.Action
        </p>
    }
}

请帮忙。谢谢,托马斯

4

2 回答 2

0

您不能嵌套表单,最好使用 ajax 发布到控制器操作,该操作具有您需要将角色添加为表单数据或参数的信息。手动设置参数的打开表单标签中设置的提交操作。您还可以使用 javascript 根据按钮单击来更改提交时的表单属性,但是使用标准输入来触发 ajax 调用会更容易,这些输入使用您要提交的每一行的数据字段来触发 ajax 调用。form.onSubmit 属性将允许您将参数添加到表单操作中的同一操作。button.onClick 属性允许您构建将转到特定控制器和操作以处理您的逻辑的 ajax 调用。

于 2016-02-10T17:37:16.997 回答
0

问题以不同的方式解决(3 种形式 - 在 ViewBag 中传递用户名):

@using (Html.BeginForm("GetUserRoles", "Manage"))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)
    <p>
        Users: @Html.DropDownList("UserName", (IEnumerable<SelectListItem>)ViewBag.Users, "Select ...")
        <input type="submit" value="Get roles" name="action:GetUserRoles" />
    </p>
}

@if (ViewBag.RolesForThisUser != null)
{
    <hr/>
    <p>
        <text>User roles:</text>
        <ol>
            @foreach (var role in ViewBag.RolesForThisUser)
            {
                using (Html.BeginForm("GetUserRoles", "Manage"))
                {
                    @Html.AntiForgeryToken()
                    <li>@role 
                    <input type="hidden" name="UserName" value="@ViewBag.User" />
                    <input type="hidden" name="DeleteRoleName" value="@role" />
                    <input type="submit" value="Delete" name="action:DeleteRole" /></li>
                }
            }
        </ol>
    </p>
}

@using (Html.BeginForm("GetUserRoles", "Manage"))
{
    @Html.AntiForgeryToken()
    if (ViewBag.RolesForThisUser != null)
    {
        <p>
            <text> Role name: </text>
            @Html.DropDownList("RoleName", (IEnumerable<SelectListItem>)ViewBag.Roles, "Select ...")
            <input type="hidden" name="UserName" value="@ViewBag.User" />
            <input type="submit" value="Add role" name="action:AddRole"/>
        </p>
    }
}
于 2016-02-11T11:31:37.237 回答