C# MVC4 Razor-将对象Id从foreach循环绑定到Url.Action,该操作';这是不可能的

C# MVC4 Razor-将对象Id从foreach循环绑定到Url.Action,该操作';这是不可能的,c#,jquery,asp.net-mvc,razor,asp.net-mvc-4,C#,Jquery,Asp.net Mvc,Razor,Asp.net Mvc 4,我不确定这是否可以实现,因为Url.Action()正在尝试访问仅在foreach范围内的变量-可能使用jQuery 我有一个强类型的局部视图,它采用包含搜索结果列表的视图模型 我反复浏览列表,每个结果都以摘要形式显示。在列表中的每个项目旁边都有一个按钮,单击该按钮会启动一个模式窗口,显示有关列表项目的更详细信息。因此,如果列表中有10项,那么将有10个对应的“更多信息”按钮 局部视图: <div> @foreach (var result in Model.SearchResult

我不确定这是否可以实现,因为
Url.Action()
正在尝试访问仅在foreach范围内的变量-可能使用jQuery

我有一个强类型的局部视图,它采用包含搜索结果列表的视图模型

我反复浏览列表,每个结果都以摘要形式显示。在列表中的每个项目旁边都有一个按钮,单击该按钮会启动一个模式窗口,显示有关列表项目的更详细信息。因此,如果列表中有10项,那么将有10个对应的“更多信息”按钮

局部视图:

<div>
@foreach (var result in Model.SearchResults)
{
    <div class="basic-search-result">
        <div class="row-fluid">
            <img class="span3" src="http://some-img.jpg" />
            <div class="span3">
                <div class="address">
                    @result.Address.TownCity<br />@result.Address.County
                </div>
                <div>
                    €@result.MonthlyRate Monthly
                </div>
            </div>
            <div class="span3 offset1" id="basic-search-result-btns">
                <button class="btn btn-primary btn-block" id="btn-show-modal-from-get-all">More info</button>
            </div>
        </div>
    </div>
}
</div>
单击其中一个按钮时,应启动一个模式。这样处理:

<script type="text/javascript">
$(document).ready(function () {
    $('#btn-show-modal-from-get-all').click(function () {
        var url = $('#modal-view-property-from-get-all').data('url');

        $.get(url, function (data) {
            $('#view-property-from-get-all-container').html(data);

            $('#modal-view-property-from-get-all').modal('show');
        });
    });
});

$(文档).ready(函数(){
$(“#btn显示全部获取的模式”)。单击(函数(){
var url=$('#模态视图属性from get all')。数据('url');
$.get(url、函数(数据){
$('#查看来自get all容器的属性').html(数据);
$(“#来自get all的模态视图属性”).modal('show');
});
});
});

我知道我在
Url.Action()中绑定的Id超出了foreach的范围。是否有可能在单击按钮时以某种方式获取
结果.ResidentialPropertyId
并将其动态传递到
Url.Action()


为了证明它有效,我将
Url.Action()
放在foreach循环中,但这只为列表中的第一项启动了一个模式。我想做的事情可以实现吗?

不要在
数据url中包含
Id

<div class="modal hide fade in" id="modal-view-property-from-get-all" 
    data-url="@Url.Action("ViewProperty", "ResidentialProperties")">
    <div id="view-property-from-get-all-container"></div>
</div>
在js中执行以下操作

$(document).ready(function () {
    $('.show-modal').click(function () {
        var url = $("#modal-view-property-from-get-all").attr('data-url');
        var id = $(this).attr('data-id');

        $.get(url + '/' + id, function (data) {
            $('#view-property-from-get-all-container').html(data);

            $('#modal-view-property-from-get-all').modal('show');
        });
    });
});

当您将按钮放置在foreach循环中时,ID是否正确地唯一附加。您是说我应该将Url.Action()放在每个按钮上,而不是放在模式定义中?是的,或者使用自定义属性附加ID,然后在Javascript函数中访问它。。。。如果您在编写此代码时需要任何帮助,请告诉我……….
var id
是否从
data id=“@result.id
”中获取值?我已将其更改为
data id=“@result.ResidentialPropertyId
。我在点击时得到一个404—“路径'/undefined/9'的控制器未找到或未实现IController。”使用
.attr
而不是
.data
。尝试过,但现在错误已更改为“路径'/undefined/undefined'的控制器未找到或未实现IController。”更改为
.attr
url似乎没有Id。还有其他想法吗?这是我的最新答案。你应该在那把小提琴里放一些类似html的东西。我没有把@Url.Action改成ResidentialProperties/ViewProperty。再次感谢您的解释,帮助我理解url是如何构造的。
// assuming Id is the identifier per row
<button class="btn btn-primary btn-block show-modal" 
    data-id="@result.Id">More info</button>
$(document).ready(function () {
    $('.show-modal').click(function () {
        var url = $("#modal-view-property-from-get-all").attr('data-url');
        var id = $(this).attr('data-id');

        $.get(url + '/' + id, function (data) {
            $('#view-property-from-get-all-container').html(data);

            $('#modal-view-property-from-get-all').modal('show');
        });
    });
});