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>
}