MVC模型绑定复杂类型到操作参数

时间:2017-06-08 12:36:01

标签: c# asp.net-mvc razor

我使用MVC3的模型绑定将客户列表绑定到客户搜索结果页面,并使用Razor在foreach循环中呈现所有客户。我的问题是如何将客户对象发送回操作以节省我不得不再次获取详细信息。

以下是我的操作方法签名:

public ActionResult BasketAddCustomer(Customer customer)

Customer对象非常大,即。很多字段

以下是视图的缩减版本,该视图呈现每个客户并具有选择每个客户的按钮。

@model WebUI.Models.SearchModel
@foreach (var customer in Model.Customers)
    {
                <h5>@customer.FirstName @customer.LastName</h5>
                <button onclick="window.location.href = '@Url.Action("BasketAddCustomer", "Cust", customer)';">Select customer</button>                    
    }

问题在于,传递给操作的客户似乎充满了空白。

由@ URL.Action呈现的html在下面,看起来是一个好的开始,但只有一些客户字段,而不是全部。客户是否过于复杂而无法以这种方式分解?有没有更好的方法呢?

<button onclick="window.location.href = 
'/Test/Cust/BasketAddCustomer?BirthDate=01%2F01%2F0001%2000%3A00%3A00&amp;PrimaryEmailFlag=False&amp;PrimaryEmailDate=01%2F01%2F0001%2000%3A00%3A00&amp;PrimaryEmailID=0&amp;PrimaryPhoneFlag=False&amp;PrimaryPhoneDate=01%2F01%2F0001%2000%3A00%3A00&amp;PrimaryPhoneID=0&amp;WifiConnected=False';" >Select customer</button>

1 个答案:

答案 0 :(得分:0)

根据我对@ url.action的了解,我们只能发送路由值而无法发送对象本身。

请参阅此链接:https://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.action(v=vs.118).aspx

因此,对于您的问题,您可以将任何唯一值作为url.helper中的路由参数发送到控制器操作,并使用运行中的linq查询从数据库中获取整个对象。

注意:如果您的要求说明了,您应该只发送对象,然后您可以将表单中的所有控件放在视图中并以post方式发送。

希望以上信息有用。

由于

KARTHIK