2009-11-13 26 views
0

我正在使用ASP.NET MVC和Entity Framework。我要将一个复杂的实体传递给clent端,让用户修改它,并将其发送回控制器。但我不知道该怎么做,以及客户端实体是否会因为与对象上下文分离而失去EF的关系跟踪。从clent侧回发复杂对象

任何想法?提前致谢!

+0

为了防止您开始操作Javascript对象并想将它们发送到服务器,有一个简单的jQuery插件可以实现它(也可以发布日期等)。所以发送复杂的Javascript对象到控制器动作:http://erraticdev.blogspot.com/2010/12/sending-complex-json-objects-to-aspnet.html – 2011-04-22 07:55:09

回答

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) 
{ 

} 

这是一个相当简单的例子,你可以在对应所述对象的特性的视图具有不同的表单控件。如果您的对象非常复杂,您可以随时编写自己的模型绑定器并覆盖默认的模型绑定器。

+0

是的,的确如此。但是我发布的是一个包含100多个问题的大问题。它们包含在一个列表中。我怎样才能发布回来?谢谢! – Roy 2009-11-13 08:20:02

+2

http://marcomagdy.com/2009/09/03/asp-net-mvc-model-binding-form-inputs-to-action-parameters/ – queen3 2009-11-13 13:20:22

+0

查看queen3的链接并查看“Binding to Collections of简单类型“和”绑定到自定义类型的集合“。如果您相应地命名您的表单元素,您可以接受一个列表作为参数,并且MVC将自动将该模型绑定到该列表。 – 2009-11-13 13:44:19

-2

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

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

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