2012-11-21 167 views
1

我有一個部分認爲是這樣傳遞的模型:通過局部視圖MVC3

@model IEnumerable<NutricionApp.Models.Ingrediente> 

<table> 
<tr> 
    <th> 
     NombreIngrediente 
    </th> 
    <th> 
     CantidadPorPorcion 
    </th> 
    <th> 
     UnidadPorPorcion 
    </th> 
    <th></th> 
</tr> 

@foreach (var item in Model) { 
<tr> 
    <td> 
     @Html.DisplayFor(modelItem => item.NombreIngrediente) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.CantidadPorPorcion) 
    </td> 
    <td> 
     @Html.DisplayFor(modelItem => item.UnidadPorPorcion) 
    </td> 

</tr> 
} 

</table> 

我想渲染說,在這個視圖局部視圖,這是強類型:

@model NutricionApp.Models.Platillo 

@{ 
    ViewBag.Title = "Create"; 
    Model.ListadeIngredientes = new List<NutricionApp.Models.ListaIngredientes>(); 
} 

<h2>Create</h2> 

<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>Platillo</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.NombrePlatillo) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.NombrePlatillo) 
      @Html.ValidationMessageFor(model => model.NombrePlatillo) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.idRestaurante) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.idRestaurante) 
      @Html.ValidationMessageFor(model => model.idRestaurante) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.DescripcionPlatillo) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.DescripcionPlatillo) 
      @Html.ValidationMessageFor(model => model.DescripcionPlatillo) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.esAprobado) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.esAprobado) 
      @Html.ValidationMessageFor(model => model.esAprobado) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.esDisponible) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.esDisponible) 
      @Html.ValidationMessageFor(model => model.esDisponible) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.precio) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.precio) 
      @Html.ValidationMessageFor(model => model.precio) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.VigenciaPlatillo) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.VigenciaPlatillo) 
      @Html.ValidationMessageFor(model => model.VigenciaPlatillo) 
     </div> 
     <!--<table> 
     <tr><th>Nombre</th></tr> 
     @@foreach (var item in (List<NutricionApp.Models.ListaIngredientes>)Session["Lista"]) 
       { 
      <tr> 
      <p> 
       <td>@@item.ingrediente.NombreIngrediente</td> 
      </p> 
      </tr> 
     } 
     </table>--> 
     @Html.Partial("_Ingredientes", Model.); 
     <br /> 
     @Html.Partial("_ListaIngredientes", Model.ListadeIngredientes) 

     <p> 
      <input type="submit" value="Create" /> 
     </p> 

    </fieldset> 
} 

<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

而且在我的控制器我有這樣的:

//.... 
public ActionResult _ListaIngredientes() 
    { 
     IEnumerable<ListaIngredientes> ListaDemo = new List<ListaIngredientes>(); 
     return View(ListaDemo); 
    } 

    public ActionResult _Ingredientes() 
    { 
     return View(db.Ingredientes.ToList()); 
    } 

在這種情況下,db.Ingredients.ToList());返回我需要在局部視圖上顯示的數據。問題是,當我嘗試在我的視圖中顯示所述列表時,它告訴我必須通過與我的視圖相對應的IEnumerable模型...

如果我從URL訪問PartialView,它會正確顯示數據。但是,如果我嘗試從視圖內部執行此操作,則由於被強制鍵入,它會傳遞它當前使用的模型。我如何傳遞我需要的模型(我的成分表列表,db.Ingredientes.ToList());

+0

您需要發佈錯誤的文本。 – Heather

回答

1

您的觀點期待一個模型的IEnumerable(NutricionApp.Models.Ingrediente)。您正將它傳遞給一個實體的IEnumerable(ListaIngredientes)。這就是爲什麼它是barfing。

假設你Ingrediente模型的構造函數接受一個ListaIngredientes作爲參數,你可以改變這一行:

@Html.Partial("_ListaIngredientes", Model.ListadeIngredientes) 

@Html.Partial("_ListaIngredientes", Model.ListadeIngredientes.Select(i => new Ingrediente(i))) 

這應該解決您的問題。

+0

好的......問題不在_ListaIngredientes部分視圖中,而是在_IngredientesView中。詳細說來,我的目標是創建一個動態partialview,顯示一個成分列表(_Ingredientes),以便您可以將它們添加到成分列表中(_ListaIredredientes)。 – Angelmenam

+0

@Angelmenam你正在使用db.Ingredientes.ToList()來獲取成分。當您從控制器加載所有配料時,您如何期待不同的數據? –

+0

db.ingredients.Tolist()給我一個數據庫中每種成分的列表。但ListaDeIngredients有它自己的Ingredientes對象,我用它來複制和粘貼來自db.ingredients.Tolist()項目的信息。 – Angelmenam

2

您可以從部分視圖中引用父視圖的模型,因此可能將它們全部打包在頂層視圖中。你也可以通過Html.Partial重載明確地(或者你想要的)傳遞模型。如果您決定從View中訪問模型,請確保在View和PartialView中都包含@model指令。

+0

我不想父母的模型,因爲我想引用另一個模型 – Angelmenam

1

您是否試圖根據傳遞給父視圖的數據呈現動態分部視圖?如果是,請使用Html.RenderAction()方法,並對控制器進行一些修改,以便每次調用時都返回不同的數據,並將局部視圖返回給父視圖。 假設存在的Platillo和成分實體與一個涉及到很多關係, 你可以嘗試這樣的事:

在父視圖:

@{ Html.RenderAction("_Ingredientes", "YourControllerName", new {platilloId=Model.PlatilloId}); } 

更改您的控制器的方法:

public ActionResult _Ingredientes(int platilloId) 
    { 
return PartialView("_IngredientView", db.Platillos.where(p=>p.PlatilloId==platilloId).Ingredients.ToList(); 

    } 

祝你好運

0

我如何解決它:我剛剛創建了一個新的方法,它包含了方法i最初使用的方法,我想用於我的PartialView的方法其餘的只是使用列表來跟蹤我的數據= D