Я рассматриваю компоненты частичного просмотра MVC Framework.MVC сохраняет PartialView в своем собственном контексте - игнорирует основной вид, содержащий частичный вид
Я хочу, чтобы мой частичный вид обрабатывался в своем собственном действии, а остальная часть представления обрабатывала себя, но я получаю исключение, потому что главная страница не запускает его просмотр.
Я обойду это неправильно?
My Main View (Работа/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 (Работа/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) не передается в представление, в котором живет частичное представление (JobListings).
в основном, что я говорю, если у меня есть myview.aspx с большим количеством html.RenderPartialView ('apartialview'), который имеет формы в них, могу ли я получить его так, чтобы эти формы опубликовали свои собственные действия и основной вид (с каким когда-либо модель, наследуемая) обрабатывается также. Вместо этого, имея все формы представления кода в основном действии для представления.
Я делаю это неправильно?
Я боялся, что кто-то собирается сказать, что, поскольку я думал об этом как о решении, он просто чувствует себя грязным, если бы у меня было 5 частичных просмотров на странице, они все должны включать RedirectToAction («mainview»). Я нашел хорошее сообщение об этом здесь http://dotnetslackers.com/articles/aspnet/asp-net-mvc-2-0-using-multiple-actions.aspx упоминается использование атрибута, называемого [ChildActionOnly], который, по моему мнению, не может понять, какую пользу он приносит, помимо ограничения действия только формами в представлениях. – Mike
@Mike: Потому что это только польза от этого. Вы используете '[ChildActionOnly]', поэтому никто не вызывает его вне вашей формы. если вам не нравится воссоздать весь вид, используйте jQuery и AJAX. ваш артист имеет информацию об использовании частичных форм с Microsoft AJAX и jQuery. Решение jQuery я бы изменил на один, используя 'JQuery Form Plugin', потому что он упрощает отправку формы. Попробуй. – LukLed