2016-02-10 2 views
1

кнопки Как сделать эту часть кодаasp.net MVC множественной форма

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

Пожалуйста, помогите. Thomas

ответ

0

Проблема решена другим способом (3 формы - проходящее UserName в 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> 
    } 
} 
0

Вы не можете вставлять формы, вам было бы лучше использовать ajax для отправки в действие контроллера, у которого есть информация, необходимая для добавления роли в качестве данных формы или параметров. Действие отправки установлено в теге открытия формы с параметрами, заданными вручную. Вы также можете использовать javascript для изменения атрибутов формы для отправки на основе нажатия кнопки, но было бы проще следовать стандартным входам, которые запускают вызов ajax, используя поля данных для каждой строки, которую вы хотите отправить. Свойство form.onSubmit позволит вам добавить параметры к одному и тому же действию в действии формы. Свойство button.onClick позволяет построить вызов ajax, который перейдет к определенному контроллеру и действию для обработки вашей логики.

+0

Есть ли шанс, что вы бы разместить пример кода? Код Ajax, пожалуйста. – Maludasek