2009-12-10 44 views
0

我有用於創建/編輯文章的表單。每篇文章都與用戶相關聯。驗證標題和用戶名與xVal的唯一組合

製品publshed鏈接到每個物品從用戶名和文章的標題組成的後(和{名}/{articleTitle}應該是唯一的組合):

/articles/{userName}/{articleTitle} 

Article類:

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。

當我編輯標題時,一切正常,但當我在選擇列表中更改用戶時遇到問題。如果標題對user1無效,並且我選擇user2,則以前的錯誤消息仍然存在,並且我無法檢查user2的標題是否有效。

我可以像使用標題一樣驗證用戶名,但會出現2個錯誤說用戶名和標題組合無效的情況。

標題錯誤和用戶錯誤應該同步,但如何?

或者也許有另一種方法我應該與標題和用戶列表一起工作?

+0

你可以添加邏輯,當你選擇user2到你的文章觸發?我真的認爲它與DOM上的東西有關。 – Min 2009-12-10 00:12:53

回答

0

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> 

現在只有一個條件:用戶應從選擇列表中選擇。

當title + user1無效,我從列表中選擇user2時,我不知道如何隱藏(重置)標題錯誤消息。

與之相反:選擇用戶並編輯標題後隱藏用戶錯誤消息。