Өзіңіздің жеке көмекшіңіз үшін пайдалануды жасайсыз ба? Html.BeginForm сияқты

Мен өзіңіздің көмекшіңіздің анықтамасын жасауға бола ма? мысалы:

using (Html.BeginForm(params)) 
{
}

Мен өзімнің көмекшімімді осылай жасағым келеді. Мен қарапайым мысал келтіремін

using(Tablehelper.Begintable(id)
{
    <th>content etc<th>
}

which will output in my view

<table>
  <th>content etc<th>
</table>

Is this possible? if so, how?

Thanks

10

2 жауаптар

Әрине, мүмкін:

public static class HtmlExtensions
{
    private class Table : IDisposable
    {
        private readonly TextWriter _writer;
        public Table(TextWriter writer)
        {
            _writer = writer;
        }

        public void Dispose()
        {
            _writer.Write("</table>");
        }
    }

    public static IDisposable BeginTable(this HtmlHelper html, string id)
    {
        var writer = html.ViewContext.Writer;
        writer.Write(string.Format("<table id=\"{0}\">", id));
        return new Table(writer);
    }
}

and then:

@using(Html.BeginTable("abc"))
{
    @:<th>content etc<th>
}

will yield:

<table id="abc">
    <th>content etc<th>
</table>

I'd also recommend you reading about Templated Razor Delegates.

19
қосылды
Бір нәрсені айта кету керек ... сіз ToString() кесте сыныбында бос оралуын болдырмауыңыз керек ... егер болмаса, сіздіңDomain.HtmlExtensions.Table кестесімен ұзақ мәтінді көресіз.
қосылды автор Romias, көзі
@RonSijm, сіз осы сыныпты HataExtensions.cs файлына Extensions қапшығына орналастыруыңызға болады. Тек кеңейтілім әдісіне қол жетімді болу үшін, сіз осы сыныптың көзқарасыңызда анықталған аттар кеңістігін енгізгеніңізді тексеріңіз: @ applicationName.Extensions .
қосылды автор Darin Dimitrov, көзі
@RonSijm аттар кеңістігін ~/Views/web.config файлындағы бөліміне қоса аласыз ( емес ~ /web.config ). Осылайша, көмекші сіздің қосымшаңызда әмбебап қол жетімді болады. Немесе жай атаулар кеңістігін барлық стандартты анықтамалар анықталған жерде System.Web.Mvc.Html дегенге өзгертіңіз.
қосылды автор Darin Dimitrov, көзі
@Romias Мен өзімнің ұстаушы үлгілерімде «пайдалануды» ескермегенде бұл жағдайды байқадым.
қосылды автор emragins, көзі
Жақсы, рахмет. Сіз мұны сыныпта істегендіктен, мен әдеттегі @ helper Method() әдісімен мүмкін емес деп ойлаймын? Сондай-ақ, оны қай жерге орналастырамын? Мен оны app_code қалтасына басқа көмекшімен бірге қоюға тырыстым, бірақ бұл жұмыс істемеген сияқты.
қосылды автор Ron Sijm, көзі
рахмет, бұл жұмыс істейді. Өте нашар, ол тек _layout.cshtml файлында пайдалануды ғана жасамайды.
қосылды автор Ron Sijm, көзі
рахмет, аттар кеңістігін қоса :) керемет жұмыс жасады.
қосылды автор Ron Sijm, көзі

Иә ол сондай; алайда, Tablehelper. * пайдалану үшін базалық көріністі қосып, Tablehelper сипатын қосыңыз. Мүмкін, HtmlHelper кеңейтілім әдісін қосу оңайырақ:

public static SomeType BeginTable(this HtmlHelper html, string id) {
    ...
}

бұл сізге жазуға мүмкіндік береді:

using (Html.BeginTable(id))
{
    ...
}

бірақ бұл өз кезегінде басқа сантехниканы қажет етеді (элементті BeginTable жүйесінде бастау үшін және оны Dispose() қайтарылған мәнде аяқтаңыз).

0
қосылды