2011-07-07 41 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)