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個錯誤說用戶名和標題組合無效的情況。
標題錯誤和用戶錯誤應該同步,但如何?
或者也許有另一種方法我應該與標題和用戶列表一起工作?
你可以添加邏輯,當你選擇user2到你的文章觸發?我真的認爲它與DOM上的東西有關。 – Min 2009-12-10 00:12:53