vistas vista ventana parciales parcial mvc modal c# asp.net-mvc asp.net-mvc-5 asp.net-mvc-partialview

c# - ventana - vista parcial en modal mvc



pasar un modelo diferente a la vista parcial (3)

Esto es bastante simple de hacer. Hay una directiva html que puede mostrar una vista parcial. Lo siguiente es la muestra del código:

@Html.Partial("nameOfPartial", Model)

Ahora aquí el Modelo podría ser de su controlador principal.

o puede definir una nueva acción de controlador con partialviewresult como tipo de retorno e intentar renderizarlo en la página de esta manera:

@{Html.RenderAction("Someaction", "somecontroller");}

Estoy tratando de pasar un modelo diferente a la vista parcial desde una vista. Tengo dos acciones de controlador separadas para ambos y dos modelos de vista diferentes. Pero cuando llamo a la vista parcial desde dentro de la vista, me da el error

El elemento de modelo que se pasa al diccionario es del tipo ''Application.ViewModels.Model1ViewModel'', pero este diccionario requiere un elemento de modelo de tipo ''Application.ViewModels.PartialViewModel''.

Lo estoy llamando así:

@Html.Partial("_CreateUniFunctionPartial")

la llamada modelo en la vista es

@model Application.ViewModels.Model1ViewModel

y el modelo en el archivo de vista parcial es

@model Application.ViewModels.PartialViewModel

No estoy seguro de cómo pasar la vista parcial por lo que no da este error.

EDITAR

Vista parcial

@model Application.ViewModels.PartialViewModel @using (Html.BeginForm("partialview", "ApplicationDetail", FormMethod.Post)) { <div class="form-horizontal"> <h4>UniFunctionViewModel</h4> <hr /> @Html.ValidationSummary(true) <div class="form-group"> @Html.LabelFor(model => model.detail, new { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.TextBoxFor(model => model.detail, new { @placeholder = "Further Information" }) @Html.ValidationMessageFor(model => model.detail) </div> </div> </div>

}


estás usando el método correcto pero no estás pasando los argumentos correctos

Es posible que desee probarlo así:

@Html.Partial("~/[path_to_root_only_if_exists]/_CreateUniFunctionPartial.cshtml", new Application.ViewModels.PartialViewModel())

Si no pasa un modelo, automáticamente tomará el de su padre, que en su caso es

Application.ViewModels.Model1ViewModel


Una cosa que tendrá que hacer es regenerar un modelo o utilizar una propiedad en el modelo. Por ejemplo:

public class OuterViewModel { public InnerViewModel InnerViewModel { get; set; } } public class InnerViewModel { public string SomeProperty { get; set; } }

En la página superior, puede aceptar el OuterViewModel, luego pasar el modelo de vista interna al parcial.

Outer.cshtml:

@model OuterViewModel @Html.Partial("_InnerPartial", Model.InnerViewModel)

_InnerPartial.cshtml:

@model InnerViewModel @using (Html.BeginForm("Inner", "Controller")) { <div> @Html.AntiForgeryToken() @Html.TextBoxFor(m => m.SomeProperty) <input type="submit" value="Save" /> </div> }