ASP.Net MVC 3 RC2, обработка форм частичных представлений - PullRequest
1 голос
/ 17 декабря 2010

После многих лет разработки веб-форм я решил попробовать MVC. Мне удалось преодолеть большинство других камней преткновения, но я застрял на этом.

В веб-формах я создавал бы элементы управления для каждой из своих форм, чтобы можно было использовать модули для повторного использования их на всех своих сайтах. Я пытаюсь сделать то же самое в MVC, но с частичными взглядами, и мне не везет. Возможно, это что-то простое, и, возможно, я просто не ищу правильный набор ключевых слов, чтобы найти очевидный пример.

Допустим, я создаю строго типизированное частичное представление для формы входа. Я хочу включить его на нескольких страницах моего сайта. Поскольку код отделен от представления, как мне инкапсулировать логику, чтобы ее можно было легко использовать в нескольких представлениях? В веб-формах я просто вставил его в код. В MVC я должен поместить код в каждый контроллер представления, где я хочу использовать элемент управления?

Во-вторых, как вы обрабатываете сообщения из частичных просмотров? Я попытался создать строго типизированные представления и частичные представления, но модели представлений не заполняются автоматически, как это происходит, когда форма находится непосредственно в представлении. Я всегда мог использовать FormCollection в качестве параметра действия и просто вводить значения в мои модели частичного представления, но это не кажется слишком элегантным. Может ли кто-нибудь указать мне на некоторые функциональные примеры того, как использовать несколько строго типизированных частичных страниц с формами в одном представлении (например, страницу входа с элементом управления входом и элементом управления реестром)

Ответы [ 3 ]

2 голосов
/ 17 декабря 2010

В MVC вы не должны хранить какую-либо логику в View (кроме битов View only).
В качестве примеров я предлагаю взглянуть на Fabrikam Shipping .

., вы можете использовать Partials и Edit / View шаблоны.Чтобы отправить часть формы - вы можете использовать jQuery AJAX (Hijax):

$("#someForm").submit(function () {
            $.post($(this).attr("action"), $(this).serialize(),  
                  function (response) {
                       $("#someContainer").append(response);
                  });
            return false;
        });

Также, если вы хотите отправить всю форму другому действию или контроллеру, вы можете использовать что-то вроде этого:*

0 голосов
/ 17 декабря 2010

У нас нет действительно чистого решения для помощников Razor в MVC3.На обычном веб-сайте вы можете поместить файл CSHTML или VBHTML в App_Code, а затем использовать предложенный синтаксис jgauffin.К сожалению, мы не смогли реализовать упомянутую им модель ~ / Views / Helpers из-за некоторых ограничений в нашей системе компиляции, которые мы не смогли преодолеть для v1 (мы исследуем для v2).

Дэвид Эббо (David Ebbo), архитектор из группы ASP.Net, предложил решение, использующее генераторы кода Visual Studio, чтобы вы могли скомпилировать своих помощников в ЛЮБУЮ DLL (даже в обычную библиотеку классов):1005 * очень рекомендуем проверить это

0 голосов
/ 17 декабря 2010

Поместите это в папку Views\Helpers:

@helper LoginControl() {
    @using (Html.BeginForm("Login","Home")) {

    }
}

И используйте это в своих взглядах или мастер:

<div>
    @LoginControl()
</div>

теперь просто добавьте это в свой HomeController

public ActionResult Login(LoginModel model)
{
}
...