【问题标题】:How to render MVC Custom Helper through jQuery MVC4如何通过 jQuery MVC4 渲染 MVC 自定义助手
【发布时间】:2014-08-16 14:32:48
【问题描述】:

我想将 jQuery 对象(列表)传递给 MVC4 自定义 HTML Helper。

我的看法是这样的:

<script type="text/javascript">
$(document).ready(function () {
    var datafilterList = GetDataFilter('@Url.Action("GetJsonDataFilter")'); // this is external file ajax call and I am getting the data pulled from controller. all ok here.
    @Html.DataFilterFor(datafilterList) // how to pass datafilterList and call custom helper??
});
</script>

我的助手类:

public static class DataFilter
{
    public static MvcHtmlString DataFilterFor(this HtmlHelper html, List<View_webpages_DataFilter> DataFilterList)
    {
        StringBuilder sb = new StringBuilder();
        // TODO: Create the form and render html - I removed the unnecessary html code
        return new MvcHtmlString(sb.ToString());
    }
}

谁能告诉我如何将 jquery 对象 datafilterList 传递给 mvc 自定义助手?

谢谢

【问题讨论】:

    标签: jquery asp.net-mvc-4 html-helper


    【解决方案1】:

    你不能。 Razor 代码(帮助程序)在创建视图时和发送到浏览器之前在服务器上运行。 Javascript 在浏览器上运行,不知道什么是 html 助手。

    即使理论上这是可能的,你正在做的是向服务器发送一个页面,然后糟糕!,我忘记了一些数据,所以回到服务器并返回它,然后再次糟糕,我真正想要的是一些html,所以回到服务器并返回它。为什么在创建页面时就可以完成所有这些往返。

    要么:

    1. 获取GetDataFilter() 在 用于生成此视图并呈现 html(直接在他的视图中或调用子操作以包含 局部视图);或者如果你更喜欢 AJAX

    2. 让GetJsonDataFilter() 函数返回您想要的 html(或调用 另一种返回html的方法)然后成功 函数,将html添加到DOM

    【讨论】:

    • 实际上我并没有将页面发送到服务器,也不是我忘记拉一些数据的情况。我就是这样设计的。我只是通过 AJAX 调用 MVC 控制器。而且我正在使用多个调用,因为某些数据将在特定时间被提取。另外我正在使用 jTable,所以我不想更改内部 jTable 库。所以我必须有多个 AJAX 调用。我认为这绝对没问题。回到问题:有没有办法解码jQuery对象并将其传递给MVC自定义助手?
    • 否,因为 html 助手在服务器上运行。如果您因为需要在特定时间点调用GetDataFilter()而无法使用选项1,那么您需要使用选项2
    • 好的,我明白了。如果我在 html helper 类中获取数据可以吗? :例如:@Html.DataFilterFor("1234") - 这是我在视图内联写的 ` public static class DataFilter { public static MvcHtmlString DataFilterFor(this HtmlHelper html, int menuid) { // 从数据库中获取数据用于 menuid 和返回 HTML } } `
    • 我会这样做。在您调用var datafilterList = .. 之后,然后类似于$.get('/SomeController/SomeAction', { id: datafilterList }, function(data) { $('SomeElement').html(data); }); 其中public ActionResult SomeAction(int id) {.. 返回html。您不一定是 html 助手(即您可以删除 this HtmlHelper html 参数),除非您还将它用于其他视图。或者,在局部视图中使用帮助程序,然后使用 return PartialView("SomeView, model");。如果你愿意,我可以用一个例子来更新答案。
    • 我正在考虑像这样使用 HtmlHelper 强制转换,但它不起作用。 @Html.DataFilterFor((List)Html.Raw(Json.Decode(filterModel))) 我同意你的看法。我不应该对 HtmlHelper 这么固执,在我的情况下我必须删除。如果我使用 ajax get 并使用 $('SomeElement').html(data); 渲染 html 也很好。但随后我将不得不在每一个视图上写下这个。更好的是我会去局部视图。谢谢
    猜你喜欢
    • 1970-01-01
    • 2016-05-07
    • 2012-09-13
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多