c# - una - Motor de visualización Razor: cómo puedo agregar vistas parciales
partial view mvc 5 (2)
Me preguntaba qué, si es posible, es la mejor manera de hacer una parcial usando el nuevo motor de visión de afeitar. Entiendo que esto es algo que no se terminó completamente por el momento
En este momento estoy usando RenderPage para representar el control del usuario:
@RenderPage("~/Views/Shared/LocaleUserControl.cshtml",ViewData.Model)
La página que llama a RenderPage utiliza una página de diseño (principal) con tres secciones definidas: TitleContent, HeadContent y Maincontent. Cuando intento renderizar mi control de configuración regional desde esta página, parece que estas secciones también son obligatorias; solo deben solicitarse en la página de llamada y están presentes. Recibo el siguiente mensaje, independientemente de si incluyo o no las secciones en mi vista parcial (obviamente no quiero incluir estas secciones, pero me pareció un punto de depuración interesante ...).
Las siguientes secciones se han definido pero no se han representado en la página de diseño ''~ / Views / Shared / LocaleUserControl.cshtml'': TitleContent; HeadContent; Contenido principal
Mi vista parcial es la siguiente (adaptada del siguiente link ):
@inherits System.Web.Mvc.WebViewPage<LocaleBaseModel>
@using System.Web.UI;
<p>
@Html.LabelFor(model => Model.CountryName)
<br />
@Html.DropDownListFor(model => Model.CountryName,null, string.Empty, new { @class = "text", accesskey="u"})
</p>
<p>
@Html.LabelFor(model => Model.StateProvince)
<br />
@Html.DropDownListFor(model => Model.StateProvince, null, string.Empty, new { @class = "text", accesskey="t" })
</p>
<script type="text/javascript">
$(function () {
var countries = $("#CountryName");
var statesprovinces = $("#StateProvince");
countries.change(function () {
statesprovinces.find(''option'').remove();
var url = ''@Url.Action("GetStatesProvinces", "Base")'';
$.getJSON(url, { countryId: countries.val() }, function (data) {
$(data).each(function () {
$("<option value=" + this.ID + ">" + this.Name + "</option>").appendTo(statesprovinces);
});
});
});
});
</script>
Si no quiere duplicar el código, y como yo solo quiere mostrar las estadísticas, en su modelo de vista, podría simplemente pasar los modelos de los que desea obtener datos, así:
public class GameViewModel
{
public virtual Ship Ship { get; set; }
public virtual GamePlayer GamePlayer { get; set; }
}
Luego, en su controlador simplemente ejecute sus consultas en los respectivos modelos, páselos al modelo de vista y devuélvalos, por ejemplo:
GameViewModel PlayerStats = new GameViewModel();
GamePlayer currentPlayer = (from c in db.GamePlayer [more queries]).FirstOrDefault();
[código para verificar si los resultados]
//pass current player into custom view model
PlayerStats.GamePlayer = currentPlayer;
Como dije, solo deberías hacer esto si quieres mostrar las estadísticas de las tablas relevantes, y no hay otra parte del proceso CRUD, por razones de seguridad que otras personas han mencionado anteriormente.
Usted se parece mucho a una plantilla de editor para que pueda incluirla como tal (suponiendo, por supuesto, que su parcial se coloque en la subcarpeta ~/views/controllername/EditorTemplates
):
@Html.EditorFor(model => model.SomePropertyOfTypeLocaleBaseModel)
O si este no es el caso simplemente:
@Html.Partial("nameOfPartial", Model)