Piszę kod, w którym chciałbym renderować formularz BeginForm MVC, ale także zawierać dodatkowy kod HTML.

Np.

@using (Html.BeginMyCustomForm()) {

}

A to wypluwa

<form action="" etc>

PLUS

<input type="hidden" name="my-additional-field-i-always-want">

@Html.ValidationMessageFor(m => m)

Czy to możliwe?
Wiem, że będę szukał jakiegoś rozszerzenia lub czegoś najprawdopodobniej.
Mam nadzieję, że to ma sens iz góry dziękuję!

4
Adam 27 wrzesień 2012, 05:40

2 odpowiedzi

Najlepsza odpowiedź

Może możesz użyć czegoś takiego?

public static class FormExtensions
{
    public static MvcForm BeginMyCustomForm(this HtmlHelper htmlHelper)
    {
        var form = htmlHelper.BeginForm();
        htmlHelper.ViewContext.Writer.write( .... )
        return form;
    }
}
1
Bart 27 wrzesień 2012, 05:50

Nie jest dobrym pomysłem dołączanie takich rzeczy do rozszerzenia BeginForm. Powodem jest to, że dobry projekt nakazuje przedmiotom robić jedną rzecz. Nazywa się to zasadą pojedynczej odpowiedzialności.

Teraz chcesz, aby obiekt formularza również tworzył dane wejściowe i walidację.

Zamiast tego użyj systemu szablonów MVC i utwórz szablon domyślny, który będzie odpowiadał Twoim potrzebom. Powinieneś również użyć Html.HiddenFor zamiast używać znacznika wejściowego, chyba że istnieje jakiś konkretny powód, aby tego nie robić.

Inną opcją jest użycie rusztowania MVC do wygenerowania tego, co chcesz.

Więcej informacji o szablonach edytora http:// /bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-1-introduction.html

Więcej informacji o rusztowaniach http://blog.stevensanderson.com/2011/01/13/scaffold-your-aspnet-mvc-3-project-with-the-mvcscaffolding-package/

2
Erik Funkenbusch 27 wrzesień 2012, 05:56