2016-09-23 2 views
1

Я начал работать с MVC с нескольких дней и получил вопрос из изучения множества способов общения между контроллерами и представлениями в MVCКак передать значение из кнопки отправки в mvc динамически?

У меня есть страница, показывающая список сотрудников в табличной форме.

Модель типа IEnumerable из Employee Model

Он имеет три кнопки, они являются Edit, Create, Delete, Details.

Требование:
я использовал кнопки, так что все должно быть HTTP Post типа запроса, потому что я не хочу, чтобы пользователи непосредственно к ним доступ с помощью запросов URL.

Вот мой взгляд код:

@using (Html.BeginForm()) 
{ 
    <p> 
     <input type="submit" name="CreateView" value="Create New(Post)" formaction="CreateView" formmethod="post" /> 
    </p> 
    <table class="table"> 
     <tr> 
      -------Headings of table------- 
     </tr> 
     @foreach (var item in Model) 
     { 
     <tr> 
      <td>@Html.DisplayFor(modelItem => item.EmployeeName)</td> 
      <td>@Html.DisplayFor(modelItem => item.EmployeeGender)</td> 
      <td>@Html.DisplayFor(modelItem => item.EmployeeCity)</td> 
      <td>@Html.DisplayFor(modelItem => item.DepartmentId)</td> 
      <td>@Html.DisplayFor(modelItem => item.EmployeeDateOfBirth)</td> 
      <td> 
       <input type="submit" name="EditView" value="Edit(Post)" formaction="Edit" formmethod="post" /> | 
       <input type="submit" name="DetailsView" value="Details(Post)" formaction="Details" formmethod="post" /> | 
       <input type="submit" value="Delete(Post)" onclick="return confirm('Are you sure you want to delete record with EmployeeId = @item.EmployeeId')" /> 
      </td> 
     </tr> 
     } 
    </table> 
} 

Здесь удалить кнопка работает, потому что я не нужен идентификатор сотрудника. Но для других действий, таких как редактирование, удаление и просмотр деталей, мне нужно передать идентификатор сотрудников контроллеру. Но как передать идентификатор контроллеру с помощью кнопки отправки.

В ПОЛУЧИТЬ типы запросов я использовал, чтобы передать так:

@Html.ActionLink("Details", "Details", new { id = item.EmployeeId }) 

Для одного кнопки отправки я передать данные как этого

@using (Html.BeginForm("Details", "BusinessLayer", FormMethod.Post, new { id = item.EmployeeId })) 

Может ли один скажи мне подход, который я могу пар для этого?

+0

Несколько предложений в одной форме могут быть плохой идеей. вы можете использовать кнопку вместо этого, и с помощью javascript вы можете отправить его. –

+0

@PrashantMohite, OP хочет перенаправить, так что ajax не будет работать. –

+0

Просто создайте форму для каждого действия и каждого элемента в коллекции - '@ Html.BeginForm (" Изменить "," yourControllerName, new {id = item.EmployeeId})) {}' и т. д. –

ответ

6

У вас может быть 3 отдельных тега формы, по одному для каждой кнопки. Просто убедитесь, что у вас есть поле ввода внутри формы для данных, которые вы хотите передать. Например, если ваш метод действия принимает EmployeeId с параметром с именем EmployeeId, вы должны иметь в поле ввода скрытое поле с тем же внутри формы.

@model IEnumerable<Employee> 
<table> 
@foreach(var item in Model) 
{ 
    <tr> 
     <td>@item.EmployeeName</td> 
     <td>@item.EmployeeGender</td> 
     <td>@item.EmployeeCity</td> 
     <td>@item.EmployeeDateOfBirth</td> 
     <td> 
     @using(Html.BeginForm("Details","YourControllerName")) 
     { 
      <input type="hidden" name="EmployeeId" value="@item.EmployeeId" /> 
      <input type="submit" value="Details" /> 
     } 
     @using(Html.BeginForm("Edit","YourControllerName")) 
     { 
      <input type="hidden" name="EmployeeId" value="@item.EmployeeId" /> 
      <input type="submit" value="Edit" /> 
     } 
     @using(Html.BeginForm("Delete","YourControllerName")) 
     { 
      <input type="hidden" name="EmployeeId" value="@item.EmployeeId" /> 
      <input type="submit" value="Delete" /> 
     } 
     </td> 
    </tr> 

} 

Также помните, что вложенные формы являются недействительными HTML. Поэтому убедитесь, что у вас их нет.

+0

Это работает для r me. Один сказал, что использование нескольких представлений внутри одной формы - плохая идея? Действительно ли это так, может ли любое тело дать объяснение? –

Смежные вопросы