2011-07-07 38 views
0

這似乎是一個很常見的問題,因爲很多原因,似乎適用於這種情況。我已經使用ASP.NET MVC 2創建了頁面,並且我正在使用強類型化視圖來生成從DataEnities框架生成的類。移動到視圖模型時客戶端驗證失敗

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master"  Inherits="System.Web.Mvc.ViewPage<MVC_EDI.Models.wysCustomerEndPoint>"" %> 

我做了驗證類,我綁定回數據類。

[MetadataType(typeof(EndPointValidation))] 
public partial class wysCustomerEndPoint 
{   
} 

[Bind()] 
public class EndPointValidation 
{ 
    [Required(ErrorMessage = "Please enter the end point name")] 
    public string CustName { get; set; } 

而且我能夠在我的創建頁面上使用客戶端驗證。我需要在創建頁面上添加下拉列表框,所以我將視圖切換爲使用視圖模型,而不是我使用的數據類。

public class CreateEditCustomerEndPointsViewModel 
{ 
    public wysCustomerEndPoint CustomerEndPoint {get; set;} 
    public List<SelectListItem> DefaultLocationList { get; set; } 
} 

這裏是使用新viewmodel的視圖標題。

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MVC_EDI.ViewModles.CreateEditCustomerEndPointsViewModel>" %> 

可是現在,這種觀點被加載時,它試圖設置一個值,我得到一個錯誤,我的formElement爲空?我錯誤地在這裏inteh MicrosofyMvcValidation.js文件和formElement數組爲空。

formElement['__MVC_FormValidation'] = this 

我懷疑我需要添加某種數據註釋或屬性到我的視圖模型或類似的東西。但我不確定在哪裏?令人驚訝的是,它似乎在FireFox 5中工作得很好,但是在IE9中出現炸彈?

編輯:謝謝你的回覆。是的,我相信我在添加到ViewModel並使用Html.Helper對象之前實例化對象?這是代碼。

wysCustomerEndPoint ep = new wysCustomerEndPoint(); 
ep.BuyerID = id; 
var viewModel = new CreateEditCustomerEndPointsViewModel() 
{ 
    CustomerEndPoint = ep 
}; 
return View(viewModel); 

,並在視圖

<div class="editor-label"> 
    <%: Html.Label("Name") %> 
</div> 
<div class="editor-field"> 
    <%: Html.TextBoxFor(model => model.CustomerEndPoint.CustName) %> 
    <%: Html.ValidationMessageFor(model => model.CustomerEndPoint.CustName) %> 
</div> 

歡呼

鮑勃

+0

你檢查model.isvalid嗎?查看模型的工作略有不同,我同意,但我注意到強制檢查表單發佈錯誤... – Haroon

+0

不,我沒有。我什麼時候檢查?在發送視圖之前,因爲視圖不會加載。 –

+0

我剛剛分解了wysCustomerEndPoint的所有屬性,並將它們放在視圖模型中,並在視圖模型和wysCustomerEndPoint之間來回映射。似乎對我來說很俗氣,但它起作用。感謝您的建議。 –

回答

0

你也許這樣做,但沒有看到代碼的相關位,我不想承擔。所以,確保你正在實例化wysCustomerEndPoint對象並從Controller方法發送到你的視圖。此外,您正在使用Html Helpers處理要驗證的輸入元素。例如。

Html.TextboxFor(model => model.wysCustomerEndPoint.CustName)