2013-05-26 50 views
1

我想在最初顯示(GET)時在我的表單中的文本框旁邊顯示星號(*) 另外,我希望使用相同的GET/POST時出現錯誤)所以對於GET請求 我傳入一個空的模型,如 return View(new Person());在ASP.NET MVC4中指定Html.ValidationMessageFor的默認消息

稍後,當表單提交(POST),我使用數據註釋,檢查模型狀態和 顯示的錯誤,如果任何 Html.ValidationMessageFor(V => v.FirstName)

對於GET請求,模型狀態有效且沒有消息,因此不顯示星號。 我正在嘗試通過檢查請求類型並打印星號來解決此問題。 @(HttpContext.Current.Request.HttpMethod == 「GET」 「*」:Html.ValidationMessageFor(V => v.FirstName)的ToString())

的問題是,Html.ValidationMessageFor(V = > v.FirstName)的ToString()已被編碼 ,我想從Html.ValidationMessageFor(v => v.FirstName)

獲取原始的HTML或可這裏有一個更好的辦法。 1.您如何在GET請求中顯示默認有用的消息(在表單字段旁邊) - 例如「請輸入IP地址的nnn.nnn.nnn.nnn格式」,然後顯示錯誤(如果有)? 2.什麼是從剃刀的角度來檢查,如果條件和寫入字符串或MvcHtmlString

+0

您是否嘗試過創建自己的自定義HTML助手overri使用ValidationForMessageCustom HTML助手擴展等新的ValidationMessageFor行爲,它本身在呈現給屏幕時會檢查當前請求上下文並打印適當的消息?在幫助程序中使其更具可擴展性,您可以傳遞爲獲取請求而打印的字符串,例如「請以格式輸入IP ...」 – ianaldo21

回答

1

繼我的最後一點的最好辦法,這裏是我會怎樣創建一個助手來使用:

public static class HtmlValidationExtensions 
    { 
     public static MvcHtmlString ValidationMessageForCustom<TModel, TProperty>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TProperty>> expression, string customString) 
     { 
      var returnedString = HttpContext.Current.Request.HttpMethod == "GET" ? customString : helper.ValidationMessageFor(expression).ToString(); 

      return MvcHtmlString.Create(returnedString); 
     } 
    } 

它會像這樣使用@Html.ValidationMessageForCustom(v=> v.FirstName, "Please enter IP address in the nnn.nnn.nnn.nnn format")