如何通过点击foreach内的行来调用action方法?

时间:2017-11-14 07:30:48

标签: asp.net-mvc

我使用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>

但是上面的态度没有用。

如何实施?

1 个答案:

答案 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个参数是您的模型,而不是包含模型的匿名对象。该方法将模型的每个属性序列化为查询字符串值。