是否可以将整个对象从我的视图传递给控制器。在我的每个地址都按预期填充,但我正在努力将这个完整的对象传回我的控制器方法“EditPlusNewAddress”。
@if (Model.Count() > 0)
{
<table border="1" cellpadding="1">
@foreach (var address in Model)
{
<tr>
<td>@address.postcode</td>
<td>@address.lat</td>
<td>@address.lng</td>
<td>@address.thorofare</td>
<td>@address.dthorofare</td>
<td>@address.county</td>
<td>@address.paon</td>
<td>@address.saon</td>
<td>@address.posttown</td>
<td>@address.uprn</td>
<td>@Html.ActionLink("Select Address", "EditPlusNewAddress", new { evpId = 11}, new JsonAddressModel{ county = address.county,
dthorofare = address.dthorofare,
ExtensionData = address.ExtensionData,
lat = address.lat,
lng = address.lng,
paon = address.paon,
postcode = address.postcode,
posttown = address.posttown,
saon = address.saon,
thorofare = address.thorofare,
uprn = address.uprn}, null)</td>
</tr>
}
</table>
}
我收到以下错误:
错误2参数4:无法从'AnonymousType#1'转换为'string'
错误3参数5:无法转换 'Solution.Core.AddressService.JsonAddressModel'到 'System.Web.Routing.RouteValueDictionary'
错误1'System.Web.Mvc.HtmlHelper&gt;' 不包含'ActionLink'的定义和最佳扩展名 方法过载 “System.Web.Mvc.Html.LinkExtensions.ActionLink(System.Web.Mvc.HtmlHelper, string,string,string,System.Web.Routing.RouteValueDictionary, System.Collections.Generic.IDictionary)'有一些 无效的参数
答案 0 :(得分:1)
我们不会从视图中传回对象,我们传递名称:值组合并从服务器上构建模型:
在这种情况下,您只需在控制器上执行[HttpGet]
操作即可接受JsonAddressModel
参数
[HttpGet]
public ActionResult EditPlusNewAddress(JsonAddressModel model)
{
....
}
然后在您的视图中传递您要使用的值。在这里,错误消息应该为您提供线索,因为您只是使用了错误类型的对象... JsonAddressModel
而不是RouteValueDictionary
。
这是因为你在ActionLink定义中占据了一个位置。因此,假设evpId是您JsonAddressModel
的标识符,它应该是:
@Html.ActionLink("Select Address", "EditPlusNewAddress",
new { evpId = 11 ,
county = address.county,
dthorofare = address.dthorofare,
ExtensionData = address.ExtensionData,
lat = address.lat,
lng = address.lng,
paon = address.paon,
postcode = address.postcode,
posttown = address.posttown,
saon = address.saon,
thorofare = address.thorofare,
uprn = address.uprn
})
这就是你如何建立一个看起来像的网址:
/Controller/EditPlusNewAddress?evpId=11&county=burbank&dthorofare=abc&......
模型绑定器足够智能,可以获取查询字符串并从中构建JsonAddressModel
。这就是 传递复杂网址以共享搜索过滤器等的方式。
然而问题是GET
应该是幂等操作。虽然你正在调用你的动作“EditPlusNewAddress”,听起来你想要改变某些服务器端,为此,良好的做法要求你应该创建一个表单并POSTing
回来。
GET
链接可以改变恶意软件,邪恶行为者和/或无能的东西。