2012-04-30 1 views
0

У меня есть следующий GET и методы действия POST: -Как передать список объектов вместо одного объекта к методу POST действия

public ActionResult Create(int visitid) 
{ 
    VisitLabResult vlr = new VisitLabResult(); 
    vlr.DateTaken = DateTime.Now; 
    ViewBag.LabTestID = new SelectList(repository.FindAllLabTest(), "LabTestID", "Description"); 

    return View(); 
} 

// 
// POST: /VisitLabResult/Create 

[HttpPost] 
public ActionResult Create(VisitLabResult visitlabresult, int visitid) 
{ 
    try 
    { 
     if (ModelState.IsValid) 
     { 
      visitlabresult.VisitID = visitid; 
      repository.AddVisitLabResult(visitlabresult); 
      repository.Save(); 
      return RedirectToAction("Edit", "Visit", new { id = visitid }); 
     } 
    } 
    catch (DbUpdateException) { 

     ModelState.AddModelError(string.Empty, "The Same test Type might have been already created,, go back to the Visit page to see the avilalbe Lab Tests"); 

    } 
    ViewBag.LabTestID = new SelectList(repository.FindAllLabTest(), "LabTestID", "Description", visitlabresult.LabTestID); 

    return View(visitlabresult); 
} 

В настоящее время вида отображения связанных полей для создания только одного объекта, , , но как я могу определить список объектов вместо одного объекта, чтобы иметь возможность быстро добавить, например, 10 объектов с тем же запросом «Создать». Моя страница просмотра выглядеть следующим образом: -

@model Medical.Models.VisitLabResult 

@{ 
    ViewBag.Title = "Create"; 
} 

<h2>Create</h2> 

@section scripts{ 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
} 
@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>VisitLabResult</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.LabTestID, "LabTest") 
     </div> 
     <div class="editor-field"> 
      @Html.DropDownList("LabTestID", String.Empty) 

ответ

10

Ваш ViewModel

public class LabResult 
{ 
    public int ResultId { get; set; } 
    public string Name { get; set; } 
    //rest of the properties 
} 

Ваш контроллер

public class LabController : Controller 
{ 
    // 
    // GET: /Lab/ns 

    public ActionResult Index() 
    { 
     var lst = new List<LabResult>(); 
     lst.Add(new LabResult() { Name = "Pravin", ResultId = 1 }); 
     lst.Add(new LabResult() { Name = "Pradeep", ResultId = 2 }); 

     return View(lst); 
    } 

    [HttpPost] 
    public ActionResult EditAll(ICollection<LabResult> results) 
    { 
     //savr results here 
     return RedirectToAction("Index"); 
    } 

} 

Ваше мнение

@model IList<MvcApplication2.Models.LabResult> 
@using (Html.BeginForm("EditAll", "Lab", FormMethod.Post)) 
{ 
    <table> 
     <tr> 
      <th> 
       ResultId 
      </th> 
      <th> 
       Name 
      </th> 
     </tr> 
     @for (int item = 0; item < Model.Count(); item++) 
     { 
      <tr> 
       <td> 
        @Html.TextBoxFor(modelItem => Model[item].ResultId) 
       </td> 
       <td> 
        @Html.TextBoxFor(modelItem => Model[item].Name) 
       </td> 
      </tr> 
     } 
    </table> 
    <input type="submit" value="Edit All" /> 
} 

Ваше мнение будет оказана следующим образом, этот массив на основе именования позволяет Defaultbinder к преобразовать его в ICollection как первый параметр действия EditAll

<tr> 
<td> 
     <input name="[0].ResultId" type="text" value="1" /> 
    </td> 
    <td> 
     <input name="[0].Name" type="text" value="Pravin" /> 
    </td> 
    </tr> 
    <tr> 
    <td> 
     <input name="[1].ResultId" type="text" value="2" /> 
    </td> 
    <td> 
     <input name="[1].Name" type="text" value="Pradeep" /> 
    </td> 
    </tr> 
+0

Если LabResult содержит другой список Объекты, то как я могу обрабатывать th suituation? –

+0

Был бы еще один уровень вложенности в этом случае, когда типы ввода будут отображаться с помощью [0]. Клиенты [0] .CustomerName и т. Д. –

0

Если я правильно понимаю ваш вопрос,

вы хотите изменить свой взгляд, чтобы быть список вашей модели список объектов @model, а затем с помощью цикла или однако вы хотите сделать это, создайте, тем не менее, много редакторов, которые вам нужны для каждого объекта

, то в вашем контроллере ваш получающий параметр для создания также будет вашим списком вашей модели.

+0

спасибо за ответ ,, но есть ли какая-либо документация или онлайн-пример того, как я могу это сделать? BR –

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