2015-10-06 113 views
0

此代碼驗證正確:從所述第二組塊的代碼是嵌套字段的表單驗證

@Html.LabelFor(model => model.User.FirstName, new { @class = "control-label col-md-3 required" }) 
<div class="col-md-8"> 
    @Html.EditorFor(model => model.User.FirstName, new { @class = "form-control required" }) 
    @Html.ValidationMessageFor(m => m.User.FirstName) 
</div> 

model.User:

@Html.LabelFor(m => m.FirstName, new { @class = "control-label col-md-2 required" }) 
<div class="col-md-4"> 
    @Html.EditorFor(m => m.FirstName, new { @class = "form-control" }) 
    @Html.ValidationMessageFor(m => m.FirstName) 
</div> 

此代碼未正確驗證與第一塊代碼中的「m」相同類型的對象。

下面是模型中顯示自定義驗證程序屬性的塊。

[DisplayName("First Name")] 
[Required()] 
[FirstLastName] 
public string FirstName{ get; set; } 

以下是FirstLastName屬性,它適用於第一部分代碼,但不適用於第二部分。代碼的第一個塊的

public class FirstLastNameAttribute : RegularExpressionAttribute 
{ 
    public FirstLastNameAttribute() : 
     base(@"^[A-Za-z0-9\.\-_\!\#\^\~ ]{1,31}(?<!\.)$") 
    { 
     ErrorMessageResourceName = "FirstLastNameErrorMessage"; 
     ErrorMessageResourceType = typeof(Messages); 
    } 
} 

HTML輸出,它工作的代碼第二塊的正確

<input class="input-validation-error text-box single-line form-control" data-val="true" data-val-regex="Allowed characters: a-Z, 0-9, .-_!#^~, and space. Cannot end with a period. Must be 1-32 characters." data-val-regex-pattern="^[A-Za-z0-9\.\-_\!\#\^\~ ]{1,31}(?<!\.)$" data-val-required="The First Name field is required." id="FirstName" name="FirstName" type="text" value="asdf." aria-required="true"> 

HTML輸出不正常工作

<input type="text" value="" name="User.FirstName" id="User_FirstName" data-val-required="The First Name field is required." data-val-regex-pattern="^[A-Za-z0-9\.\-_\!\#\^\~ ]{1,31}(?&lt;!\.)$" data-val-regex="Allowed characters: a-Z, 0-9, .-_!#^~, and space. Cannot end with a period. Must be 1-32 characters." data-val="true" class="text-box single-line form-control" style="background-image: url(&quot;data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABHklEQVQ4EaVTO26DQBD1ohQWaS2lg9JybZ+AK7hNwx2oIoVf4UPQ0Lj1FdKktevIpel8AKNUkDcWMxpgSaIEaTVv3sx7uztiTdu2s/98DywOw3Dued4Who/M2aIx5lZV1aEsy0+qiwHELyi+Ytl0PQ69SxAxkWIA4RMRTdNsKE59juMcuZd6xIAFeZ6fGCdJ8kY4y7KAuTRNGd7jyEBXsdOPE3a0QGPsniOnnYMO67LgSQN9T41F2QGrQRRFCwyzoIF2qyBuKKbcOgPXdVeY9rMWgNsjf9ccYesJhk3f5dYT1HX9gR0LLQR30TnjkUEcx2uIuS4RnI+aj6sJR0AM8AaumPaM/rRehyWhXqbFAA9kh3/8/NvHxAYGAsZ/il8IalkCLBfNVAAAAABJRU5ErkJggg==&quot;); background-repeat: no-repeat; background-attachment: scroll; background-position: right center; cursor: auto;" aria-required="true"> 

是不是有什麼毛病嵌套對象驗證?有一個簡單的解決方法嗎?

+0

你所顯示的內容沒有什麼不妥 - '[Required]'屬性可以正常工作。但是你沒有指出'[FirstLastName]'是什麼或者做了什麼。 –

+0

@StephenMuecke我已經添加了FirstLastNameAttribute的代碼。它適用於第一位代碼,但不適用於第二位。對於這兩組代碼,必需屬性都可以正常工作。 – CamHart

+0

對我來說工作得很好。顯示兩種情況下的html輸出。 –

回答

0

所以我想出了爲什麼它不工作。

由於某些原因(我不明白爲什麼,所以如果任何人可以解釋,請這樣做,我會改變接受的答案),在Required屬性破壞之後加上括號「()」。一旦我刪除括號,一切工作。

[DisplayName("First Name")] 
[Required] 
[FirstLastName] 
public string FirstName{ get; set; } 

它也沒有工作,因爲我正在使用的正則表達式。它不喜歡反向查找(?<!\.)部分。所以刪除後,它的工作。