我使用mvc5项目,我使用bootstrap 3。
我有这个部分页面:
@model IEnumerable<GeomindEnterprise.Models.ApplicationGroup>
@foreach (var item in Model)
{
<div class="container-fluid">
<div class="row margin-bottom-8">
<div class="col-sm-2">@Html.DisplayFor(modelItem => item.Name)</div>
<div class="col-sm-3">@Html.DisplayFor(modelItem => item.Description)</div>
<div class="col-sm-7">@Html.DisplayFor(modelItem => item.LayoutID)</div>
</div>
</div>
}
</div>
每当我点击上面生成的行时,我都需要调用此操作方法:
public ActionResult GetLayers(ApplicationGroup model)
{
//some logic
}
我试过这种方式:
@foreach (var item in Model)
{
Html.ActionLink(<div class="container-fluid">
<div class="row margin-bottom-8">
<div class="col-sm-2">@Html.DisplayFor(modelItem => item.Name)</div>
<div class="col-sm-3">@Html.DisplayFor(modelItem => item.Description)</div>
<div class="col-sm-7">@Html.DisplayFor(modelItem => item.LayoutID)</div>
</div>
</div>,
new { controller = "Articles", action = "Details",model = item })}
</div>
但是上面的态度没有用。
如何实施?
答案 0 :(得分:1)
您无法使用@Html.ActionLink()
生成<a>
元素,因为第一个参数是string
并且它将被编码(您的html不会呈现为html)。此外,通常不建议在查询字符串中发送整个模型。除了它创建的丑陋的查询字符串之外,您还有可能超出查询字符串限制并抛出异常。而是只传递记录的ID并在GET方法中再次获取它
如果您想点击<div>
而不是为“详细信息”链接添加其他列,请为您的{{1}添加网址的类名和data-
属性并使用javascript / jquery来处理<div>
事件,例如
.click()
并且jQuery脚本将是
@foreach (var item in Model)
{
<div class="container-fluid details" data-id="@item.yourIdProperty">
....
</div>
}
哪个会回发(假设您使用默认路线)
var baseUrl = '@Url.Action("Details", "Articles")
$('.details').click(function() {
var id = $(this).data('id');
location.href = baseUrl + '/' + id;
});
如果你真的想回发整个模型,那么
public ActionResult Details(int id) // not GetLayers as per your question
请注意@foreach (var item in Model)
{
<div class="container-fluid details" data-url="@Url.Action"Details", "Articles", item)">
....
</div>
}
$('.details').click(function() {
location.href = $(this).data('url');
});
的第3个参数是您的模型,而不是包含模型的匿名对象。该方法将模型的每个属性序列化为查询字符串值。