我有一個項目,需要一些內部化。具體來說,我有一個名爲「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?
爲什麼不使用字符串資源和Asp.net MVC內置的本地化功能。 – RAJ
因爲文本可以(也將會)由用戶提供。所有靜態/管理的內容都在resx文件中,但某些部分在運行時不知道。我在SO的指導下構建這個解決方案... –