التحقق من صحة العنوان واسم المستخدم تركيبة فريدة من نوعها مع XVAL

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

  •  18-09-2019
  •  | 
  •  

سؤال

لدي نموذج لإنشاء / تحرير المقالات. ترتبط كل مقال مع مستخدم.

بعد إنشاء المادة، يتكون الارتباط إلى كل مقالة من اسم المستخدم وينبغي أن يكون عنوان المقالة ({{archamed} / {articletitle} مزيج فريد):

/articles/{userName}/{articleTitle}

فئة المادة:

public class Article
{
    public int ArticleId { get; set; }

    [Required(ErrorMessage = "Please enter title")]
    public string Title { get; set; }         

    [Required(ErrorMessage = "Please select a user")]
    public int UserId { get; set; }        
}

عرض النموذج:

public class ArticleFormViewModel
{
    public Article Article { get; set; }
    public SelectList Users { get; set; }

    public ArticleFormViewModel(Article article, Dictionary<int, string> allUsers)
    {
        Article = article;

        List<SelectListItem> list = new List<SelectListItem>();
        list.Add(new SelectListItem() { Value = "", Text = "Please select a user" });

        foreach (var user in allUsers)
        {
            list.Add(new SelectListItem() { Value = user.Key.ToString(), Text = user.Value });
        }

        Users = new SelectList(list, "Value", "Text", Article.UserId);
    }
}

رأي:

<div id="validationSummary">
    <%= Html.ValidationSummary("Please correct the errors and try again.") %>
</div>

<% using (Html.BeginForm()) {%>               
    <%= Html.Hidden("ArticleId", Model.Article.ArticleId) %>

    <fieldset>
    <legend>Article</legend>            
    <ul>
        <li>
            <label for="UserId">User: <%= Html.ValidationMessage("UserId", "*")%></label>
            <%= Html.DropDownList("UserId", Model.Users) %>
        </li>
        <li>
            <label for="Title">Title: <%= Html.ValidationMessage("Title", "*") %></label>
            <%= Html.TextBox("Title", Model.Article.Title) %>
        </li>            
    </ul>
    <input type="submit" value="Save" />            
    </fieldset>
<% } %>

<%= Html.ClientSideValidation(typeof(Article))
                .AddRule("Title", new RemoteRule(Url.Action("ValidateTitle")))
                .UseValidationSummary("validationSummary", "Please correct the errors and try again.")%> 

أنا أستخدم XVAL للتحقق من الصحة.

ValidateTitle - هو إجراء تحكم يتحقق من صحة هذا {username} / {articletitle} فريد من نوعه. إنه يعمل باستخدام Ajax.

كل شيء يعمل بشكل جيد عندما أقوم بتحرير العنوان، لكن لدي مشاكل عند تغيير المستخدم في قائمة تحديده. إذا كان العنوان غير صالح للمستخدم 1، فاختر user2، تظل رسالة الخطأ السابقة ولا يمكنني التحقق من هذا العنوان للمستخدم 2 صالح.

يمكنني التحقق من صحة اسم المستخدم بنفس الطريقة التي أفعلها مع العنوان، ولكن ستكون هناك حالات عندما يخطئ 2 أخطاء أن اسم المستخدم وتركيبة العنوان غير صالحة سيتم عرضها.

يجب مزامنة أخطاء العنوان وأخطاء المستخدمين، ولكن كيف؟

أو ربما هناك طريقة أخرى يجب أن أعمل بها مع قائمة الملكية والمستخدمين؟

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

المحلول

XVAL تقوم بإنشاء قواعد التحقق من الصحة (للحصول على مكون إضافي للتحقق من صحة JQuery):

<script type="text/javascript">xVal.AttachValidator(null, 
{"Fields":[{"FieldName":"ArticleId","FieldRules":[{"RuleName":"DataType","RuleParameters":{"Type":"Integer"}}]},
{"FieldName":"Title","FieldRules":[{"RuleName":"Required","RuleParameters":{},"Message":"Please enter title"}, 
{"RuleName":"Remote","RuleParameters":{"url":"/articles/ValidateTitle"}}]},
{"FieldName":"UserId","FieldRules":[{"RuleName":"Required","RuleParameters":{},"Message":"Please select a user"}]}]}, 
{"ValidationSummary":{"ElementID":"validationSummary","HeaderMessage":"Please correct the errors and try again."}})</script>  

الآن هناك شرط واحد فقط: يجب اختيار المستخدم من قائمة مختارة.

لا أعرف كيفية إخفاء (إعادة تعيين) رسالة خطأ العنوان عند العنوان + User1 غير صالح واخترت User2 من القائمة.

والعكس: إخفاء رسالة خطأ المستخدم بعد اخترت المستخدم وتحرير العنوان.

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