MVC хранение PartialView в его собственном контексте - игнорируют основное представление, придерживающееся частичного взгляда

Я смотрю на partialview компоненты Платформы MVC.

я хочу, чтобы мое частичное представление было обработано в его собственном действии и для остальной части представления для обработки себя, но я получаю исключение, потому что основная страница не запускала свое представление.

Я обхожу это неправильный путь?

Мое Основное Представление (Jobs/Index.aspx):

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcApplication3.Models.JobViewModel>" %>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<% Html.RenderPartial("JobListing", Model.Jobs); %> 
</asp:Content>

partialview (Jobs/JobListing.ascx):

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<List<MvcApplication3.Models.Job>>" %>

<table>
<tr>
    <td> Job Title  </td>
    <td>   Job Location</td>
</tr>
<%
    foreach (var job in Model)
    {
%>
<tr>
    <td>
        <%= job.Title %>
    </td>
    <td>
        <%= job.Location %>
    </td>
</tr>
<%  
    } 
%>

<% Html.BeginForm("DoSomeStuff", "Job", null, FormMethod.Post); %>

   <%= Html.TextBox("SomeInfo") %>

    <button type="submit" id="submit" />
<% Html.EndForm(); %>

Основной контроллер и для основного представления (Индекс) и для partialview (DoSomeStuff ())

    public class JobController : Controller
{
    public ActionResult Index()
    {
        JobProvider provider = new JobProvider(Session);

        JobViewModel vm = new JobViewModel();

        vm.Jobs = provider.GetJobs();

        return View(vm);           
    }

    public PartialViewResult DoSomeStuff()
    {
        return PartialView("JobListing");
    }
}

Как Вы видите в частичном представлении, оно имеет свою собственную форму, которая отправляет на Действие под названием DoSomeStuff (). я хочу, чтобы это действие обработало любые данные, отправленные от той формы. но когда форма отправлена, основное действие (Индекс) не стреляет, и затем я получаю исключение как Модель (.Models. JobViewModel), не передается представлению, что partialview (JobListings) живет в.

в основном то, что я говорю, если у меня есть myview.aspx с большим количеством HTML. RenderPartialView ('apartialview'), которые имеют формы в них, может я получать его так, эти формы отправляют на свои собственные действия и основное представление (с тем, что когда-либо модель это наследовало), обрабатывается также. Скорее затем наличие всего представления формы кодирует в основном действии для представления.

я, делают эту несправедливость?

1
задан Mike 1 May 2010 в 22:25
поделиться

2 ответа

Я бы следовал шаблону POST-REDIRECT-GET и определил бы DoSomeStuff как:

public class JobController : Controller
{
    [HttpPost]
    public RedirectToRouteResult DoSomeStuff(DoSomeStuffModel model)
    {
        //Do some stuff with model
        return RedirectToAction("Index");
    }
} 

Если вы не хотите перезагружать всю форму, вы можете использовать jQuery Form Плагин . Если вы его используете, вы можете остаться с PartialViewResult . Если после публикации формы частичного просмотра вы укажете опцию target , содержимое div, содержащего код частичного просмотра, будет заменено возвращенным html.

1
ответ дан 3 September 2019 в 00:54
поделиться

Вызывается ли действие DoSomeStuff()?

Если да, то неудивительно, что оно не работает. RenderPartial - это вызов частичной страницы напрямую, без наличия действия контроллера. Но, возможно, поскольку оно существует, вызывается этот метод. Однако этот метод не получает Jobs, а также не передает Model обратно в представление, поэтому логично, что он не может получить модель представления.

Действительно, вам следует использовать RenderPartial, если у вас нет необходимости в выполнении действия. Если есть, то следует использовать Html.RenderAction или Html.Action

1
ответ дан 3 September 2019 в 00:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: