2015-09-28 163 views
0

我有一個MVC CSHTML形式,其中我使用以下語法生成多行:檢索屬性值

foreach (var i in Model) 
    {    
    <td> 
    @Html.TextBoxFor(a => a[j].SFDCID, new { id = "SFDCID", @class ="SFDCID" }) 
    </td> 
    } 

這是產生的HTML代碼段,如:

<input class="SFDCID" id="SFDCID" name="[0].SFDCID" type="text" value=""> 
    <input class="SFDCID" id="SFDCID" name="[1].SFDCID" type="text" value=""> 
..... 
..... 

現在我想檢查用戶是否已經在所有SFDCID字段中輸入了值,那麼只有表單提交應該發生,否則應該拋出驗證消息。

對於我試圖使用其名稱屬性&訪問值已經寫了下面的代碼:

  for (var i = 0; i <= totalNumberOfRows; i++) { 

       var elementName = '[' + i + '].SFDCID';  
       if ($("[name = elementName]").val() == "" || 
            $("[name = elementName]").val() == undefined) 
       { 
         ConsolidatedErrorMsg = "SFDC ID is a Mandatory field."; 
    } 
} 

我已經帶班試過,ID &名稱選擇獲得的價值,但在第2它只在第一行工作。 隨着名稱選擇它的名字都工作,如果我硬代碼,如「[0] .SFDCID」 &「[1] .SFDCID」但是當我與0 & 1代我,元素名稱它不工作。

請幫我糾正任何語法錯誤我在此選擇。

回答

0

$("[name = elementName]")實際上是有選擇的,從字面上看,elementName名的所有元素。實際上,你需要逃脫方括號和Concat的你已經構建的價值:

var elementName = '\\[' + i + '\\].SFDCID'; 
$("[name='" + elementName + "']") 

更好的方法是使用選擇結束:

$("[name$='\\.SFDCID']").each(function() { 
    // this here refers to the found element 
    var $this = $(this); 
    if ($this.val() === "" || typeof($this.val()) === undefined) { 
     ConsolidatedErrorMsg = "SFDC ID is a Mandatory field."; 
    } 
}) 

一對夫婦的旁註。請刪除id = "SFDCID"位,因爲頁面上的重複ID可能導致不一致的行爲。並考慮使用內置的方式來驗證必填字段。

+0

感謝安德烈這裏指出的缺陷。我想使用內置的必需字段驗證程序,但是此SFDCID字段會根據其他一些屬性值更改其行爲(強制性或可選)。我可以使用RequiredIf屬性或重寫Validate()方法,但這些方法不提供客戶端驗證選項。所以最後不得不選擇jQuery的驗證方式。 – Biki

+0

如果你知道更好的驗證方法,請幫我提供一些線索。 Thx提前。 – Biki

+1

@Biki,如果你實現了'IClientValidatable','[RequiredIf]'屬性確實提供了客戶端驗證。有一個看看[萬無一失](http://foolproof.codeplex.com/),儘管其更容易夠寫你自己的 - 請參考[文章](http://www.devtrends.co.uk/blog/the -complete導到驗證功能於asp.net-MVC -3-部分-2) –