vista una que partialview parcial net mvc example asp c# asp.net-mvc asp.net-mvc-4 controller partial-views

c# - una - Vistas parciales compartidas de MVC usando diferentes controladores y modelos



render partial view mvc 5 example (2)

Por el error, me parece que su vista parcial está buscando el mismo modelo que tiene en su vista. Pasar el modelo a su parcial debería corregir ese error

@Html.Partial("_Partial1", Model)

actualizar:

ya que eso no funcionó para ti, trataría de usar una llamada ajax

$(''.btnSubmit'').on(''click'', function(){ $.ajax({ url: "@(Url.Action("Action", "Controller"))", type: "POST", cache: false, async: true, data: { id: id }, success: function (result) { $(".Content").html(result); } }); });

entonces en tu controlador

public PartialViewResult GetPartial() { var viewModel = (from P in db.Projects join R in db.Reports on P.ProjectTitle equals R.ReportProjectID into ps from R in ps.DefaultIfEmpty() select new MyViewModel { Project = P, Report = R }); return PartialView("_Partial1", viewModel); }

Al usar esta llamada ajax puede llamar a la vista parcial desde cualquier vista y puede pasar diferentes id, al hacer clic en los botones o según sea necesario para actualizar la vista. Afortunadamente llamarlo de esta manera arreglará su error. Hazme saber si tienes alguna pregunta.

Tengo 2 controladores que generan 2 vistas de índice. Lo que me gustaría hacer es usar estas vistas como vistas parciales globales compartidas, pero parece que no puede funcionar.

¿Alguien sabe si esto es posible?

Mi código de controlador es

public ActionResult Index() { var viewModel = (from P in db.Projects join R in db.Reports on P.ProjectTitle equals R.ReportProjectID into ps from R in ps.DefaultIfEmpty() select new MyViewModel { Project = P, Report = R }); return View(viewModel); }

Mi código de ViewModel es

using System; using System.Collections.Generic; using System.Linq; using System.Web; namespace MiLife2.ViewModels { public class MyViewModel { public Project Project { get; set; } public Report Report { get; set; } } }

y mi punto de vista es

@model IQueryable<MiLife2.ViewModels.MyViewModel> @{ ViewBag.Title = "Index"; } enter code here <h2>Index</h2> <div>@Html.Partial("_Partial1")</div> <p> @Html.ActionLink("Create New", "Create") </p> <table> <tr> <th></th> </tr> @foreach (var item in Model) { <tr> <td>@item.Project.ProjectTitle </td> <td>@item.Project.ProjectCreatedByID</td> <td>@item.Project.ProjectCreatedDate</td> <td>@if (item.Report == null) { <text>No Reports</text> } else { @item.Report.Title; } </td> <td>@if (item.Report == null) { <text> </text> } else { @item.Report.Description; }</td> <td> @Html.ActionLink("Edit", "Edit", new { id=item.Project.ProjectID }) | @Html.ActionLink("Details", "Details", new { id=item.Project.ProjectID }) | @Html.ActionLink("Delete", "Delete", new { id=item.Project.ProjectID }) </td> </tr> } </table>

Si creo una página parcial y pego la vista de arriba en ella y luego uso @ HTML.Partial ("_ ProjPartial") obtengo el error

El elemento de modelo que se pasa al diccionario es del tipo ''System.Collections.Generic.List 1[MiLife2.Project]'', but this dictionary requires a model item of type ''System.Linq.IQueryable 1 [MiLife2.ViewModels.MyViewModel]'' .

Esto no ocurre si utilizo @ HTML.Partial ("_ ProjPartial") desde dentro de la página Index cshtml en la carpeta de vistas del controlador específico.


Recientemente encontré algo similar, así que quería agregar mis 2 centavos. La respuesta para mí fue en lo que estaba pasando a la Vista parcial.

Estaba intentando pasar una cadena a una vista parcial, pero cuando esa cadena resultó ser null , estaba actuando como si no hubiera pasado nada al Parcial, lo que significa que no aprobó pasar el modelo de la vista actual.

Por ejemplo, tengo una vista que representa un parcial y que parte toma una cadena:

@model SomeModel @{ Html.RenderPartial("_MyPartialView", SomeModel.StringProperty) }

Si SomeModel.StringProperty resulta ser null , intentará pasar el modelo de la vista actual (que, en este caso, es SomeModel ). Así que, en cambio, simplemente escribí lo siguiente, que pasará en una cadena vacía si SomeModel.StringProperty pasa a ser nulo:

@model SomeModel @{ Html.RenderPartial("_MyPartialView", SomeModel.StringProperty ?? string.Empty) }

Espero que esto ayude a alguien.