2013-05-29 17 views
1

我有一個MVC Ajax窗體模型類的文本框數據綁定。 在這個類我有這些領域:MVC Form DataType電子郵件null值

[Required(ErrorMessage = "First name must be filled")] 
    public string FirstName { get; set; } 

    [Required(AllowEmptyStrings = false,ErrorMessage = "Last Name must be filled")] 
    public string LastName { get; set; } 

    [DataType(DataType.EmailAddress)] 
    [Required(AllowEmptyStrings = false, ErrorMessage = "Email must be filled")] 
    public string Email { get; set; } 

所有三個字段綁定@Html.EditorFor(p=>p.FirstName/LastName/Email) - 所以這應該是相當簡單的。

一切正常,因爲它應該,但當表格發佈時,電子郵件字段始終爲空。 我試圖用<input type="email"(...)替換它,它也是空的。

因此,結論是,當表單成員有type="email"時,該值爲空。

有誰知道爲什麼,更重要的是:如何解決它? (順便說一句,這是asp.mvc4)

編輯:這是我的看法:

<div id="result"></div> 
       @using (Ajax.BeginForm("FormTest", new AjaxOptions() {HttpMethod = "POST", InsertionMode = InsertionMode.Replace, UpdateTargetId = "result"})) 
       { 
        { 
         Html.EnableClientValidation(true); 
        } 
        @Html.ValidationSummary(false) 


        @Html.LabelFor(p => p.EventForm.FirstName) 
        @Html.EditorFor(p => p.EventForm.FirstName) 
        @Html.LabelFor(p => p.EventForm.LastName) 
        @Html.EditorFor(p => p.EventForm.LastName) 
        @Html.LabelFor(p => p.EventForm.PhoneNumber) 
        @Html.EditorFor(p => p.EventForm.PhoneNumber) 
        @Html.LabelFor(p => p.EventForm.Email) 
        @Html.EditorFor(p => p.EventForm.Email) 



        @Html.LabelFor(p => p.EventForm.CompanyName) 
        @Html.EditorFor(p => p.EventForm.CompanyName) 
        @Html.LabelFor(p => p.EventForm.Adress) 
        @Html.EditorFor(p => p.EventForm.Adress) 
        @Html.LabelFor(p => p.EventForm.Zip) 
        @Html.EditorFor(p => p.EventForm.Zip) 
        @Html.LabelFor(p => p.EventForm.PostalCity) 
        @Html.EditorFor(p => p.EventForm.PostalCity) 
        @Html.LabelFor(p => p.EventForm.Country) 
        @Html.EditorFor(p => p.EventForm.Country) 
        @Html.LabelFor(p => p.EventForm.Comment) 
        @Html.EditorFor(p => p.EventForm.Comment) 
       } 

我的控制器動作:

 [HttpPost] 
     public PartialViewResult Index(EventViewModel form) 
     { 
      StoreEventRegistration(form.EventForm); 

      return PartialView("PagePartial/FormSubmit", form.EventForm); 
     } 

正如你可能知道,我haven't添加了我的整個模型,但其餘的字段的創建方式與所提及的相同。

+1

您使用的是哪種瀏覽器? – haim770

+1

你有沒有嘗試在你的發佈方法採取'FormCollection'並從那裏得到的價值? – Esteban

+0

不,@Esteban,我會試試! – Annish

回答

0

你設置你的形式,您的看法是這樣的:

using (Ajax.BeginForm(...)) 
{ 

} 

如果是確保您包括jQuery的不顯眼的AJAX分鐘文件,否則表格將使用某些瀏覽器時,可以發回到控制器(我想想我上週用IE7/8遇到了這個確切的問題 - 添加這個文件修復了它)。

<script src="@Url.Content("~/<your-path>/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 

UPDATE:

確保您有以下設置在控制器或web.config中級別:

ClientValidationEnbled=true 
UnobstrusiveJavaScriptEnabled=true 

而且這是我的理解,爲了讓所有運動部件工作您必須包含所有這些js文件:

<script src="@Url.Content("~/<your-path>/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/<your-path>/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/<your-path>/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script> 
+0

我讀過的地方是jquery.unobtrusive-ajax不需要mvc 4嗎? – Annish

+0

而且我的應用程序中的ajax功能沒有問題,只有type =「email」的輸入字段。 – Annish

+0

你在每個字段後面使用@ Html.ValidationMessageFor()嗎? – wysinawyg