ASP.NET MVC中强类型的数据集模型绑定

时间:2010-09-20 14:24:56

标签: c# asp.net-mvc

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

这是我的简化代码:

查看:

<%@ 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");
    }
}

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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