繁体   English   中英

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

[英]Strongly typed Dataset model binding in ASP.NET MVC

在我的最新项目中,我必须使用强类型数据集。 我在向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");
    }
}

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM