2

我正在使用DropDownListFor,並提供缺省選擇-- Select Make --,它具有空值。我想爲用戶提供一些提示(如「選擇製作」),但不希望允許用戶實際提交該值。目前該網站允許這一點通過。MVC 5 - 添加客戶端驗證以拒絕默認值?

我認爲加入最小長度爲2會防止它,但沒有運氣。

我對.NET MVC相當陌生,所以讓我知道如果我以完全錯誤的方式來做這件事。

實際POST請求體是:

Make=&OtherArgument=1&NextArgument=test 

查看代碼:

@Html.LabelFor(m => m.Make) 
@Html.DropDownListFor(m => m.Make, Model.Make, "-- Select Make --") 
@Html.ValidationMessageFor(m => m.Make) 

型號代碼:

[Required(ErrorMessage = "*", AllowEmptyStrings = false)] 
    [StringLength(50, MinimumLength = 2, ErrorMessage = "*")] 
    public IEnumerable<SelectListItem> Make = new List<SelectListItem> 
    { 
     new SelectListItem 
     { 
      Text = "Deere", 
      Value = "Deere" 
     }, 
     new SelectListItem 
     { 
      Text = "Case", 
      Value = "Case" 
     }, 
     new SelectListItem 
     { 
      Text = "CAT", 
      Value = "CAT" 
     } 
    }; 
+0

要麼刪除Default參數,要麼檢查jquery中所選下拉列表的值 –

+0

這有點難以分辨。你似乎有一個'OtherArgument'的值被張貼出來,但是從你顯示的內容來看,它並不清楚它會從哪裏來。也許我只是沒有看到明顯的東西。 –

+0

@ArijitMukherjee如果我刪除了默認參數,那麼下拉菜單會自動選擇第一個選項。我不希望這樣做,因爲用戶更可能在不更改選項的情況下提交表單(我想迫使他們選擇)。 –

回答

6

這裏的第一個問題是模型之間的區別選擇模型用戶可以選擇。 將ModelSelect屬性添加到您的模型解決此(和一些視圖更改)。

第二個問題是通過添加腳本引用來啓用jquery不顯眼的驗證。

這些是你需要採取的步驟,以防止表單提交(假設MVC4 +)的JavaScript驗證。

型號

public class AModel 
    { 
     [Required(ErrorMessage = "*", AllowEmptyStrings = false)] 
     [StringLength(50, MinimumLength = 2, ErrorMessage = "*")] 
     public string SelectedMake { get; set; } 
     public IEnumerable<SelectListItem> Make = new List<SelectListItem> 
     { 
      new SelectListItem 
      { 
       Text = "Deere", 
       Value = "Deere" 
      }, 
      new SelectListItem 
      { 
       Text = "Case", 
       Value = "Case" 
      }, 
      new SelectListItem 
      { 
       Text = "CAT", 
       Value = "CAT" 
      } 
      }; 
    } 

注SelectedMake財產

查看在下拉列表和ValidationMessag的第一個參數

@using(Html.BeginForm()){ 
    @Html.LabelFor(m => m.Make) 
    @Html.DropDownListFor(m => m.SelectedMake, Model.Make, "-- Select Make --") 
    @Html.ValidationMessageFor(m => m.SelectedMake) 
    <input type="submit" value="submit" /> 
} 

注SelectedMake EFOR

腳本引用

<script src="~/Scripts/jquery-1.8.2.min.js"></script> 
<script src="~/Scripts/jquery.validate.min.js"></script> 
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script> 

所需啓用jQuery驗證

屏幕抓取

enter image description here

注意紅色的星號,現在jquery不顯眼,可以防止表單提交。

+1

這是不同的btwn模型,抓住了我,謝謝。 –

0

爲了觸發客戶端驗證,輸入必須在<form>之內,並且取決於版本(MVC 3和更早版本),具體使用@Html.BeginForm

如果這不是問題,你可以發佈更多的視圖?

+0

更多信息[here](http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-validation.html) –

+0

有用的鏈接,謝謝 –