2009-01-03 191 views
0

我想知道是否有办法让ASP.NET控件可以很好地与我的ASP.NET MVC应用程序一起玩。这是我正在做的。ASP.NET MVC中的用户控件内的ASP.NET控件的命名

我有一个订单页面,显示有关单个订单对象的信息。该页面通常会有一堆数据行,每行代表一个OrderItem对象。每行都是一个ASP.NET用户控件。在用户控件上有一个带有两个文本框(数量和价格)的表单元素和一个更新按钮。

当我单击更新按钮时,我希望表单将单个OrderItem行的数据发布到控制器方法并更新数据库中的OrderItem记录。

这是我的问题:当帖子发生时,框架抱怨,因为窗体上的字段不匹配控制器方法上的参数。每个表单字段类似于“OrderItem_1 $ Quantity”或“OrderItem_2 $ Price”,而不是“Quantity”或“Price”,它们与我的方法参数相匹配。

有人告诉我,我可以通过确保在ID是我所有的控制都对页面独特的解决这个问题,但允许NAME s到不同形式之间的重复,因此,如果发布单个行的表单时,名称可以与我的控制器方法上的内容匹配。

唯一的问题是,我正在使用ASP.NET控件为我的文本框(我真的想继续这样做),我找不到任何方式来覆盖名称字段。在ASP.NET控件上没有Name propery,甚至当我尝试使用Attributes访问器属性通过说“control.Attributes [”Name“] =”Price“;”它只是添加了另一个名称=属性的HTML标签不起作用。

有没有人知道我能做这个工作?我真的不喜欢像TextBox和DropDown这样的所有HtmlHelper函数,因为我讨厌让我的.aspx像PHP或ASP一样使用< %%>标签和其他所有东西。谢谢!

回答

3

我认为你跨越了ASP.NET WebForms和ASP.NET MVC这两个世界。您确实需要在MVC中使用Html.TextBox方法等。这使您可以完全控制标记,这是MVC的主要优点之一。

控制生成的HTML的问题,例如,获得两个名称属性,正是MVC旨在解决的问题。如果你停止战斗并顺其自然,它会更好。

<%>标签不是一个问题,除非你有逻辑在那里。把简单的表示逻辑放在你的视图上是没问题的。

如果你不喜欢这样,那么最好是坚持使用标准的ASP.NET。