ASP .NET MVC KendoUI,如何将可观察的viewModel属性传递给MVC Action?

时间:2014-06-25 15:58:42

标签: c# asp.net-mvc kendo-ui

我有一个视图模板,可以显示来自kendo.observable viewmodel的数据。 但是,作为视图模板的一部分,我想渲染一个接受参数的局部视图。如何将参数传递给操作?

在下面的例子中,

<div data-bind="text: data.name"></div> 

的工作原理。现在,我如何将data.name传递给

@Html.Action("_Discounts", "GroupBuys", new { name = data.name }) 

//查看模板,它是数据绑定到viewmodel

<script id="details-template" type="text/x-kendo-template">
<div class="details">
    <div class="info-container">
        <div data-bind="text: data.name"></div>
        <div data-bind="text: data.description"></div>
        ${data.name} //This by itself works
        @Html.Action("_Discounts", "GroupBuys", new { name = ${data.name} }) //Doesn't work
    </div>
</div>
</script>

//控制器动作接受参数“名称”

public ActionResult _FindName(string name)
{
  ...
}

我试过了:

@Html.Action("_Discounts", "GroupBuys", new { name = @:data.name }) 
@Html.Action("_Discounts", "GroupBuys", new { name = @:"${data.name}" }) 
@Html.Action("_Discounts", "GroupBuys", new { name = ${data.name} }) 

似乎无效。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

@Html.Action("_Discounts", "GroupBuys", new { name = ${data.name} })

请记住这是服务器端代码。它将在kendo JavaScript开始在浏览器中运行之前在页面上呈现,因此此时您的kendo.observable viewmodel不存在。

即使您使用Kendo MVC绑定,他们也会在页面上呈现JavaScript。

我的建议是为你的部分做一个Ajax调用,并且在ajax的成功中使用返回的HTML返回你的模板。

$.ajax({
    url: 'YourURL',
    data: { name: "name" },
    dataType: 'html',
    success: function (html) {
        $("#selectDivForReturnedHtmlInKendoTemplate").replace(html);
        var template = kendo.template($('#details-template'));
        renderTemplate(template);
    },
    error: function (e) {
        ajaxError(e);
    }
});