عرض جزئي مع البادئة المخبرية لأسماء التحكم

StackOverflow https://stackoverflow.com/questions/955371

  •  11-09-2019
  •  | 
  •  

سؤال

لدي bareditor.ascx، التي يمكن استدعاؤها من أماكن مختلفة.

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyApp.Models.Bar>" %>
<%= Html.TextBox("a") %>
...

الآن فكر في أنني بحاجة إلى تحرير كائنين على صفحة واحدة edit.aspx

    <form action="update">
        <div>
            <% Html.RenderPartial("BarEditor", ViewData["bar"]); %>
        </div>
        <div>
            <% Html.RenderPartial("BarEditor", ViewData["baz"]); %>
        </div>

        <input type="submit" value="Submit" />
    </form>

هذا يقدم:

a=1&a=2

أحتاج أن تكون:

bar.a=1&baz.a=2

حتى نتمكن من معالجة ذلك

public ActionResult Update(Bar bar, Bar baz)
{
    ...
}

ما هي أفضل طريقة لكتابة Bareditor.ascx القابلة لإعادة الاستخدام التي يمكن أن تولد البادئات لأسماء التحكم؟

هل كانت مفيدة؟

المحلول

ما عليك سوى إنشاء فئة ViewModel ل Bareditor الخاص بك وجعلها مكتوبة بشدة لهذه الفئة الجديدة

على سبيل المثال

namespace ViewModel {
    public class BarEditor {

        string Prefix { get; set; }
        Models.Bar Bar { get; set; }
    }
}

الآن يمكنك إنشاء مربع النص الخاص بك في bareditor.ascx مثل هذا

<%= Html.TextBox(Model.Prefix + ".a") %> 

وفي رأيك، تضم Bareditor من هذا القبيل

 <form action="update">
    <div>
        <% Html.RenderPartial("BarEditor", new ViewModel.BarEditor { Prefix = "Bar", Bar = ViewData["bar"]}); %>
    </div>
    <div>
        <% Html.RenderPartial("BarEditor", new ViewModel.BarEditor { Prefix = "Baz", Bar = ViewData["baz"]}); %>
    </div>
    <input type="submit" value="Submit" />
 </form>

هذر

نصائح أخرى

وأود أن اجتياز سلسلة ("BAZ" أو "شريط"، إلخ) مع ViewData عند استدعاء عنصر تحكم المستخدم. احصل على اسم HTML.TextBox من النص الذي تم تمريره وقيمته من القيمة المرت.

لماذا لا تنشئ نموذجا للعرض؟ سيحتاج رأيك إلى أن يكون عرضا مكتفا بقوة باستخدام FormView فئة البيانات.

public class FormView
{
    string Bar {get; set;}
    string Baz {get; set;}
}

ثم في رأيك يمكنك استخدام

<form action="update">
    <div>
        <% Html.RenderPartial("BarEditor", Model.Bar); %>
    </div>
    <div>
        <% Html.RenderPartial("BarEditor", Model.Baz); %>
    </div>

    <input type="submit" value="Submit" />
</form>

تحكم الخاص بك يصبح

public ActionResult Update(FormView MyForm)
{
    ... = MyForm.Bar;

    ... = MyForm.Baz;
}

يجب أن تتعلم عن تعيين نموذج في ASP.NET MVC. سيتم تقديم كل شيء في صفحة ASP.NET MVC إلى عنصر تحكم HTML وبالتالي لا تميز بين عناصر التحكم في <٪ HTML.RenderPartial ("Barreditor"، ViewData ["Bar"])؛ ٪> و <٪ html.renderpartial ("bareditor"، viewdata ["baz"])؛ ٪>

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top