2014-07-02 76 views
2

我有一個項目,需要一些內部化。具體來說,我有一個名爲「LocalizedString」的類,它包含特定文本的英文和德文翻譯。具有ValidationMessage的複雜類型

這看起來是這樣的:

[ComplexType] 
public class LocalizedString : IComparer, IComparable 
{ 
    public string EnglishText { get; set; } 
    public string GermanText { get; set; } 
// this is only an example - the real class has some methods to return the text in the current language. 
    } 

類是在幾乎所有我的域名和視圖模型像這樣使用:

public class DemoItem 
{ 
    public LocalizedString ItemDescription {get; set;} 
} 

最後,DemoItem可能呈現:

@model Domain.Entities.DemoItem 

@{ 
    ViewBag.Title = "Create"; 
} 

<h2>Create</h2> 


@using (Html.BeginForm()) 
{ 
    @Html.AntiForgeryToken() 

    <div class="form-horizontal"> 
     <h4>DemoItem</h4> 
     <hr /> 
     @Html.ValidationSummary(true, "", new { @class = "text-danger" }) 
     <div class="form-group"> 
      @Html.LabelFor(model => model.ItemDescription , htmlAttributes: new { @class = "control-label col-md-2" }) 
      <div class="col-md-10"> 
       @Html.EditorFor(model => model.ItemDescription , new { htmlAttributes = new { @class = "form-control" } }) 
       @Html.ValidationMessageFor(model => model.ItemDescription , "", new { @class = "text-danger" }) 
      </div> 
     </div> 

     <div class="form-group"> 
      <div class="col-md-offset-2 col-md-10"> 
       <input type="submit" value="Create" class="btn btn-default" /> 
      </div> 
     </div> 
    </div> 
} 

<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

現在的問題是,EditorFor方法呈現兩個文本框作爲輸入字段的ItemDescription - 這是完美的,應該看起來像這樣。但是如果有錯誤,例如用戶忘記輸入德文描述,ValidationMessageFor()不起作用。或者更具體地說:沒有錯誤顯示給用戶,因爲回發提供的項目不是預期的格式。通過ValidationSummary顯示所有錯誤的作品,但不如錯誤元素旁邊的錯誤。

是否有一種簡單的方法來獲取特定於有問題的元素的ValidationMessages?

+0

爲什麼不使用字符串資源和Asp.net MVC內置的本地化功能。 – RAJ

+0

因爲文本可以(也將會)由用戶提供。所有靜態/管理的內容都在resx文件中,但某些部分在運行時不知道。我在SO的指導下構建這個解決方案... –

回答

1

如果您在LocalizedString類中使用屬​​性的DataAnnotation屬性,那麼驗證消息將出現在有問題的元素旁邊。

我添加了驗證屬性到GermanText而EnglishText如下

[Required] 
    public string EnglishText { get; set; } 

    [Required] 
    public string GermanText { get; set; } 

而且能看到驗證消息不允許的元素旁邊。這樣做,我可以看到每個違規元素旁邊的驗證消息。

我希望這會hep。