2
我們正在爲基本網站開發一些輔助功能標準,並且如果模型中定義的驗證失敗,需要將焦點返回到用戶名字段。我已經閱讀了幾篇文章,指出這是它存在的行爲。但是,這不是我們所看到的行爲。我打開MVC 3字段驗證專注於失敗
我們正在爲基本網站開發一些輔助功能標準,並且如果模型中定義的驗證失敗,需要將焦點返回到用戶名字段。我已經閱讀了幾篇文章,指出這是它存在的行爲。但是,這不是我們所看到的行爲。我打開MVC 3字段驗證專注於失敗
我看了幾個帖子MVC natice功能(我們使用MVC 3剃鬚刀)或jQuery的),它們指出,這是因爲它存在
怪異的行爲,你在哪裏那些帖子?我建議你通知這些帖子的作者,這不是默認行爲。
當然,當某些東西不是默認行爲時,如果要實現它,則必須實現它。例如,如果存在多個錯誤,您還沒有完全指定它的行爲方式:哪個字段應該關注?首先?第三?第七?
讓我們假設你想專注於第一個。假設你正在使用jQuery,你可以添加以下內容到你的視圖中:
@if (!ViewData.ModelState.IsValid)
{
var key = ViewData
.ModelState
.Where(x => x.Value.Errors.Count > 0)
.Select(x => x.Key)
.FirstOrDefault();
if (!string.IsNullOrEmpty(key))
{
<script type="text/javascript">
$(function() {
$(':input[[email protected](Json.Encode(key))]').focus();
});
</script>
}
}
你已經完成了很多工作。好吧,這個代碼的進一步改進,當然是將其外部化爲一個可重用的HTML幫助程序,以避免將您的觀點轉化爲絕對可怕的東西。例如,你可以擁有這將實現此行爲定製的幫手,所有你需要做的是以下內容添加到您的_Layout
:
public static class HtmlExtensions
{
public static IHtmlString FocusOnFirstError(this HtmlHelper htmlHelper)
{
if (htmlHelper.ViewData.ModelState.IsValid)
{
return MvcHtmlString.Empty;
}
var key = htmlHelper
.ViewData
.ModelState
.Where(x => x.Value.Errors.Count > 0)
.Select(x => x.Key)
.FirstOrDefault();
if (string.IsNullOrEmpty(key))
{
return MvcHtmlString.Empty;
}
var script = new TagBuilder("script");
script.Attributes["type"] = "text/javascript";
script.InnerHtml = string.Format(
"$(function() {{ $(':input[name={0}]').focus(); }});",
Json.Encode(key)
);
return new HtmlString(script.ToString(TagRenderMode.Normal));
}
}
:
可以用的東西沿着線來實現謝謝Darin!儘管[不必要的]諷刺,你給了我我需要的東西。傑出的職位。 – RockyMountainHigh