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");
 }
Другие вопросы по тегам