【问题标题】:render view model on item click在项目单击时呈现视图模型
【发布时间】:2012-10-15 19:23:37
【问题描述】:

情况如下:我有一个Product 模型,它有很多属性,其中一个是Photo 对象的列表,每个Photo 对象都有一个ID 和一个Name。有一个轮播视图,其模型列表为Photos。在Product View 我有这样的东西:

@if (Model.Photos.Count > 0)
{
    ....
    <a href="javascript:jsFunction()".......

在 javascript 中,jsFunction 看起来像这样:

function jsFunction()
{
  alert('@Html.Action("GetPhotosCarousel", Model.Photos)');
} 

Controller 函数返回局部视图_PhotosCarousel

现在,@Html.Action 在渲染主视图时执行的问题,NOT ON CLICK

如何仅在单击而不是在显示页面时呈现视图 PhotosCarousel

【问题讨论】:

  • &lt;a href="javascript:jsFunction()" ... 更改为&lt;a href="#" onclick="jsFunction()" .. 会实现您的目标吗?
  • 不,它仍在运行页面时执行...
  • 谁能帮我解决这个问题?

标签: javascript jquery asp.net-mvc view render


【解决方案1】:

你可以试试这个:

代码已经准备好拥有多个锚元素:

HTML:

<div class="container">

    <a href="@Url.Action("GetPhotosCarousel")" 
        data-id="@Model.Id" 
        data-name="@Model.Name" 
        class="call-get-photos-carousel">click</a>

    <div class="result"></div>

</div>

JS:

$(document).ready(function(){

    $('.call-get-photos-carousel').bind('click', function(event) {

        var 
            _this = this, 
            data = {'Id': $(this).data('id'), 'Name': $(this).data('name')};

        $.get($(this).attr('href'), data,  function(html) {
            $(_this).siblings('.result').html(html);
        });

        return false;
    });
});

但如果你只有一个锚元素,你可以在元素中使用 ID 以这种方式工作:

HTML:

<div>

    <a href="@Url.Action("GetPhotosCarousel")" 
        data-id="@Model.Id" 
        data-name="@Model.Name" 
        id="call-get-photos-carousel">click</a>

    <div id="result"></div>

</div>

JS:

$(document).ready(function(){

    $('#call-get-photos-carousel').bind('click', function(event) {

        var 
            _this = this, 
            data = {'Id': $(this).data('id'), 'Name': $(this).data('name')};

        $.get($(this).attr('href'), data,  function(html) {
            $('#result').html(html);
        });

        return false;
    });
});

在这两种情况下,操作都会发送到IdName 的值。

【讨论】:

  • 谢谢,但我会尽量具体一点。我有“主要型号”产品。我需要点击打开一个模型视图,其中包含该模型的一部分(这是一个项目列表)。“主模型”产品包含一个照片列表。每张照片都有一个 ID 和名称。而且,在
  • 关于产品详情我已经有了照片列表,所以不需要对GetPhotosCarousel操作进行任何操作,除了返回部分视图
【解决方案2】:

我建议从您的 href 中删除对 jsFunction 的实际调用,然后使用 jQuery 处理它。

<a href="#" id="photoCarouselHref">Click Me</a>

$(document).ready(function(){
    $("#photoCarouselHref").click(function(){
        $.ajax({
            url: '@Url.Action("GetPhotosCarousel"),
            //other ajax settings here
        });
    });
});

jQuery ajax 文档here.

【讨论】:

  • 好的,如何将对象列表作为数据传递给 ajax 请求?
  • 也许我不明白你想要做什么。您是否有理由需要发布整个模型以获取部分模型?您能否将单个字段(例如 ID)发布到 Action,这将为您的局部视图构建您需要的任何视图模型?
  • 为了填充部分,我已经拥有当前视图所需的所有信息。我需要这份清单,我有。我可以通过我编写的 js 函数轻松获取部分的内容,但是这种方式是在创建页面时调用 Html.Action,而不是在单击项目时调用。如果我做一个ajax请求,你是对的,它会在点击时完成,但我不能(或不知道)怎么做,如何在ajax中发送列表
猜你喜欢
  • 2012-03-15
  • 2013-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-13
  • 2015-12-11
  • 1970-01-01
相关资源
最近更新 更多