asp.net MVC частичное представление контроллера действия
Я очень новичок в разработке веб-приложений, и я подумал, что начну с новейших технологий, и поэтому я пытаюсь одновременно изучить asp.net и инфраструктуру MVC. Это, наверное, очень простой вопрос для вас, профессионалов MVC.
У меня вопрос, должно ли частичное представление иметь связанное действие, и если да, то вызывается ли это действие всякий раз, когда используется обычная страница? RenderPartial()
на частичный вид?
5 ответов
Хотя у вас может быть действие, которое возвращает частичное представление, вам не нужно действие для отображения частичного представления. RenderPartial принимает частичное представление и отображает его, используя данную модель и данные представления, если они предоставляются, в текущем (родительском) представлении.
Вам может потребоваться действие, которое возвращает частичное представление, если вы используете AJAX для загрузки / перезагрузки части страницы. В этом случае возврат полного просмотра нежелателен, так как вы хотите перезагрузить только часть страницы. В этом случае вы можете заставить действие просто вернуть частичное представление, соответствующее этому разделу страницы.
Стандартный механизм
Использование частичного представления в обычном представлении (никаких действий не требуется)
...some html...
<% Html.RenderPartial( "Partial", Model.PartialModel ); %>
...more html..
Ajax механизм
Перезагрузка части страницы с помощью AJAX (частичное примечание отображается встроенным при начальной загрузке страницы)
...some html...
<div id="partial">
<% Html.RenderPartial( "Partial", Model.PartialModel ); %>
</div>
...more html...
<script type="text/javascript">
$(function() {
$('#someButton').click( function() {
$.ajax({
url: '/controller/action',
data: ...some data for action...,
dataType: 'html',
success: function(data) {
$('#partial').html(data);
},
...
});
});
});
</script>
Контроллер для AJAX
public ActionResult Action(...)
{
var model = ...
...
if (Request.IsAjaxRequest())
{
return PartialView( "Partial", model.PartialModel );
}
else
{
return View( model );
}
}
Принятый ответ является полностью правильным, но я хочу добавить, что вы можете загрузить частичное представление, используя загрузку jQuery. Требуется меньше настроек, если вы не хотите учитывать параллелизм.
$("#Your-Container").load("/controller/action/id");
Я смог добиться чего-то похожего с этой логикой.
Внутри.cshtml
@Html.Action("ActionMethodName", "ControllerName");
Внутри контроллера
[Route("some-action")]
public ActionResult ActionMethodName()
{
var someModel = new SomeModel();
...
return PartialView("SomeView.cshtml", someModel);
}
И это все.
Если вам нужно передать значения из.cshtml в метод действия, то это возможно.
Ответ - нет. Но иногда вам нужно некоторое действие контроллера за частичным представлением. Затем вы можете создать actionMethod, который возвращает частичное представление. Этот actionMethod может быть вызван в другом представлении:
@Html.Action("StockWarningsPartial", "Stores")
Метод действия может выглядеть так:
public ActionResult StockWarningsPartial()
{
....
return View("StockWarningsPartial", warnings);
}
и представление "StockWarningsPartial.cshtml" начинается с:
@{
Layout = null;
}
чтобы он не отображал окружающий макет снова.
public ActionResult GetStateList(int country_id)
{
List<stateDTO> stateList = new List<stateDTO>();
stateList = bll.GetState(country_id);
ViewBag.sList = new SelectList(stateList, "state_id", "State_Name");
return PartialView("DisplayStates");
}