2010-09-20 74 views
1

在我的最新项目中,我必须使用强类型的DataSets。我有一个问题提交表单到POST控制器:我得到一个无参数的构造函数错误,即它没有找到控制器上的OrderCreate post方法 。我会appriciate任何帮助。谢谢。强类型ASP.NET MVC中的数据集模型绑定

这里是我的简化代码:

查看:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyPortal.Models.MyTypedDataRow >" %> 
<% using (Html.BeginForm("OrderCreate", "Order", FormMethod.Post)) 
{%> 
    <%: Html.ValidationSummary(true)%> 
    <fieldset> 
     <legend>Fields</legend> 

     <p class="fields"> 
      <%: Html.Label("Customer")%> 
      <%: Html.TextBoxFor(model => model.CustomerName)%> 
      <%: Html.ValidationMessageFor(model => model.CustomerName)%> 
     </p> 
     <p> 
      <input type="submit" value="Add" /> 
     </p> 
    </fieldset> 

<% } %> 

控制器:

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult OrderCreate() 
{ 
    MyTypedDataTable table = new MyTypedDataTable(); 
    MyTypedDataRow row = table.NewMyTypedDataRow(); 

    return PartialView(row); 
} 


[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult OrderCreate(FormCollection coll, MyTypedDataRow row) 
{ 
    int result = m_repo.InsertGI(row); 
    if (result > 0) 
    { 
     return RedirectToAction("OrderList"); 
    } 
    else 
    { 
     return View("Error"); 
    } 
} 
+0

你在运行MVC 1吗? – Stefanvds 2010-09-20 14:29:16

+0

不,我正在使用MVC 2. – Jani 2010-09-20 16:57:15

回答

1

我猜想,你有没有MyTypedDataRow参数构造函数。模型联编程序需要一个无参数的构造函数来填充项目。您可以将所有属性单独放入方法中,并使用表的NewMyTypedDataRow方法构造行,或者编写自定义数据绑定器,但是如果没有无参数的构造函数,将无法执行您想要使用默认方法执行的操作模型活页夹。

+0

我的数据集都是基于设计器的,即从服务器资源管理器拖放数据库表,我想他们都没有无参数构造函数。我会看看。 TNX – Jani 2010-09-20 17:08:18

0
  1. 编写一个可以创建MyTypedDataRow的自定义数据联编程序。您可以编写一个通用绑定器,知道如何创建所有非默认对象。
  2. 创建MyTypedDataRow,然后手动调用UpdateModel()。
  3. 创建额外的MyTypedDataRowViewModel,它将复制MyTypedDataRow字段(但也可以添加验证属性,更多视图逻辑等)并使用AutoMapper在它们之间进行转换。将MyTypedDataRowViewModel传递给POST操作。