从客户端回发复杂对象

时间:2009-11-13 05:30:53

标签: asp.net-mvc entity-framework

我正在使用ASP.NET MVC和Entity Framework。我将把一个复杂的实体传递给客户端,并允许用户修改它,然后将其发送回控制器。但我不知道如何做到这一点以及客户端实体是否会失去对EF的关系跟踪,因为它与对象上下文分离。

3 个答案:

答案 0 :(得分:2)

ASP.NET MVC能够模型绑定复杂对象,并且它非常擅长。一种简单的方法是将视图字段命名为与对象的属性相同。在你的动作方法中,表单发布给你的方式只需要复杂的对象作为参数。例如:

<% using(Html.BeginForm()) { %>

    <%= Html.TextBox("Property1") %>
    <%= Html.TextBox("Property2") %>
    <%= Html.TextBox("Property3") %>
    <%= Html.TextBox("Property4") %>
    <%= Html.CheckBox("PropertyBool") %>
    <%= Html.TextBox("Property5") %>

<% } %>

这样的动作方法的帖子如下:

public ActionResult Index(ComplexObject complexoObject)
{

}

这是一个相当简单的示例,因为您可以在视图中为对象的相应属性设置不同的表单控件。如果你的对象非常复杂,你总是可以为它编写自己的模型绑定器并覆盖默认的模型绑定器。

答案 1 :(得分:0)

该实体将被分离。您需要再次获取实体,更新属性,然后提交更改。或者,您可以重新附加实体,但是当您处理同时附加的多个相关实体时,这可能会非常棘手。如果是这种情况,请查看http://www.codeproject.com/KB/architecture/attachobjectgraph.aspx

答案 2 :(得分:-2)

您是说在一个页面上显示100个问题的列表?我希望你不是那样做的。首先,这不是非常用户友好。它涉及大量向下滚动,用户可能迷路,容易出错,如果出现问题,他必须重新做一遍。

更好的方法是一次一个或几个问题。使用Next / Prev按钮在它们之间移动。

你可以让自己更容易,忘记回发并采用AJAX方式 - 以AJAX方式向一些Json服务发出一个post请求。并且在每个问题之后保存进度,因此如果出现问题,用户可以从他离开的地方稍后恢复。它将更加易于维护,更快速,用户更友好。