У меня есть функция на моем веб-сайте (некоторые пользовательский интерфейс и связанные с ней функции), которую я хочу использовать на нескольких страницах.Для целей этого вопроса, скажем, это функция «Комментарии».
В моем приложении есть область для Компонентов, а внутри области - контроллер: /Controllers/CommentController
и два частичных представления: /Views/Comment/Index.ascx
(для отображения комментариев) и /Views/Comment/Create.ascx
(для создания комментариев).
CommentController выглядит примерно так:
public class CommentController : Controller
{
[ChildActionOnly]
public ActionResult Index()
{
return PartialView(GetComments());
}
[HttpGet]
[ChildActionOnly]
public ActionResult Create()
{
return PartialView(); //this is wrong.
}
[HttpPost]
[ChildActionOnly]
public ActionResult Create(FormCollection formValues)
{
SaveComment(formValues);
return RedirectToAction("Index"); //this is wrong too.
}
}
Частичное представление индекса:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<div>
<% foreach (var item in Model) { %>
<div>
<%: item.Comment %>
</div>
<% } %>
<%: Html.ActionLink("Add a Comment", "Create", "Comment", new { area = "Components" }, null) %>
</div>
Создание частичного представления:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>
<div>
<% using (Html.BeginForm())
{%>
Enter your comment:
<div>
<input type="text" name="comment" />
</div>
<p>
<input type="submit" value="Create" />
<% //also render a cancel button and redirect to "Index" view %>
</p>
<% } %>
</div>
Частичное индексированиепредставление включается в представление с помощью RenderAction
, например так:
<% Html.RenderAction("Index", "Comment", new { area = "Components" }); %>
Этот код не работает, поскольку формы в частичных представлениях подчиняются действиям на контроллере CommentsController, помеченным [ChildActionOnly]
(этоЯ не хочу, чтобы «Компоненты» запрашивались независимо от страницы хостинга).
Как я могу заставить работать этот «компонентный» подход, то есть иметь частичное представление, которое отправляет форму для изменения состояния компонента на странице без потери самой страницы хостинга?
РЕДАКТИРОВАТЬ: Чтобы уточнить, использование [ChildActionOnly]
не моя проблема здесь.Если я удаляю атрибут из моих методов действия, мой код только «работает» в том смысле, что он не выдает исключение.Мой «компонент» по-прежнему выпадает из своей страницы хостинга при отправке формы (потому что я говорю, чтобы форма отправлялась по URL-адресу частичного представления!).