Редактирование и создание представления с использованием частичного EditCreate.ascx в ASP.NET MVC - PullRequest
1 голос
/ 22 марта 2010

Если вы посмотрите на пример NerdDinner по созданию и редактированию обедов, то увидите, что они используют частичный (ViewUserControl или ASCX) DinnerForm, чтобы объединить функциональность создания и редактирования обедов в одном файле, потому что он очень важен, и они используют его используя RenderPartial ("DinnerForm").

Этот подход мне подходит, но я столкнулся с проблемой, когда нужно добавить дополнительные значения маршрута или html-свойства в тег Form.

Принимает текущее действие и контроллер автоматически:

<% using (Html.BeginForm()) { %>

Однако, если я использую другую перегрузку BeginForm (), которая позволяет передавать в enctype или любой другой атрибут, я должен сделать это следующим образом:

<% using ("Create", "Section", new { modal = true }, FormMethod.Post, new { enctype = "multipart/form-data" }))

и, как вы можете видеть, мы теряем возможность автоматически определять, в каком представлении мы вызываем RenderPartial ("OurCreateEditFormPartial"). У нас не может быть жестко запрограммированных значений, потому что в режиме «Правка» эта обратная передача не будет выполнена или не вернется к правильному действию контроллера.

Что мне делать в этом случае?

Ответы [ 2 ]

3 голосов
/ 22 марта 2010

А как насчет добавления следующих помощников HTML:

    public static MvcHtmlString CurrentAction(this HtmlHelper htmlHelper)
    {
        return htmlHelper.ViewContext.RouteData.Values["action"];
    }

    public static MvcHtmlString CurrentController(this HtmlHelper htmlHelper)
    {
        return htmlHelper.ViewContext.RouteData.Values["controller"];
    }

Тогда вы могли бы пойти что-то вроде этого:

<% using (Html.CurrentAction, Html.CurrentController, new { modal = true }, FormMethod.Post, new { enctype = "multipart/form-data" }))

Это не на 100% идеально, но вы также можете добавить дополнительный помощник HTML, который упростит его еще немного:

public static MvcForm BeginForm(this HtmlHelper htmlHelper, object routeValues, FormMethod method, object htmlAttributes)
{
    return htmlHelper.BeginForm(Html.CurrentAction, Html.CurrentController, routeValues, method, htmlAttributes);
}

Дайте мне знать, если это поможет. Приветствия

0 голосов
/ 16 февраля 2011

Я отвечаю в старой ветке, потому что она заняла второе место в поиске Google, когда я искал ту же самую вещь :) Нашел на этом SO сообщении:

Html.BeginForm и добавление свойств

С MVC3 (не уверен в MVC2) вы можете передать значение null для действия и контроллера и получить маршруты по умолчанию, которые будет использовать BeginForm ().

@Html.BeginForm(null, null, FormMethod.Post, new { enctype="multipart/form-data"})

Ура!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...