كيف يمكنني التحقق من صحة النتيجة في قالب محرر ASP.NET MVC؟

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

سؤال

لقد قمت بإنشاء قالب محرر لتمثيل الاختيار من قائمة المنسدلة الديناميكية ويعمل كما ينبغي أن يكون باستثناء التحقق من الصحة ، والذي لم أتمكن من اكتشافه. إذا كان النموذج لديه [Required] مجموعة السمات ، أريد أن يبطل ذلك إذا تم تحديد الخيار الافتراضي.

كائن نموذج العرض الذي يجب تمثيله كقائمة المنسدلة Selector:

public class Selector
{
    public int SelectedId { get; set; }
    public IEnumerable<Pair<int, string>> Choices { get; private set; }
    public string DefaultValue { get; set; }

    public Selector()
    {
        //For binding the object on Post
    }

    public Selector(IEnumerable<Pair<int, string>> choices, string defaultValue)
    {
        DefaultValue = defaultValue;
        Choices = choices;
    }
}

يبدو قالب المحرر هكذا:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<select class="template-selector" id="<%= ViewData.ModelMetadata.PropertyName %>.SelectedId" name="<%= ViewData.ModelMetadata.PropertyName %>.SelectedId">
<%
    var model = ViewData.ModelMetadata.Model as QASW.Web.Mvc.Selector;
    if (model != null)
    {
            %>
    <option><%= model.DefaultValue %></option><%
        foreach (var choice in model.Choices)
        {
            %>
    <option value="<%= choice.Value1 %>"><%= choice.Value2 %></option><%
        }
    }
     %>
</select>

لقد حصلت على العمل من خلال تسميته من وجهة نظر مثل هذا (حيث Category هو Selector):

<%= Html.ValidationMessageFor(n => n.Category.SelectedId)%>

لكنه يظهر خطأ التحقق من الصحة لعدم توفير رقم مناسب ولا يهتم إذا قمت بتعيين Required ينسب.

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

المحلول

لقد وجدت حلًا يتم فيه التحقق من الصحة مقابل الحقول المخفية باستخدام قواعد التحقق من الصحة المخصصة ، هنا. باستخدام هذا النهج ، يمكنك بسهولة إضافة التحقق المخصص إلى أنواع تعسفية.

نصائح أخرى

لماذا لا يتم كتابة قالب المحرر الخاص بك بقوة؟

<%@ Control Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<QASW.Web.Mvc.Selector>" %>

لماذا لا تستخدم المساعد المنسدلة:

<%= Html.DropDownListFor(
    x => x.SelectedId, 
    new SelectList(Model.Choices, "Value1", "Value2")
)%>

لتجنب الأوتار السحرية ، يمكنك إضافة خاصية choiceslist إلى نموذج العرض الخاص بك:

public IEnumerable<SelectListItem> ChoicesList 
{
    get
    {
        return Choices.Select(x => new SelectListItem
        {
            Value = x.Value1.ToString(),
            Text = x.Value2
        });
    }
}

وربط المساعد الخاص بك به:

<%= Html.DropDownListFor(x => x.SelectedId, Model.ChoicesList) %>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top