ASP.NET MVC5从部分视图调用JavaScript函数

时间:2017-01-05 11:17:11

标签: javascript jquery asp.net-mvc asp.net-mvc-5

我想从MVC5 Partial view调用JavaScript函数,我传递参数。

我在addItem(item)函数之前在文件顶部的单独JS文件中声明了函数$(document).ready(function {})

我尝试过以下代码:

@foreach (string item in (TempData["Items"] as List<string>))
{
    TempData["Item"] = item;
    <script type="text/javascript">addItem(@TempData["Item"]);</script>
}

以下内容:

@foreach (string item in (TempData["Items"] as List<string>))
{
    <script type="text/javascript">addItem(item);</script>
}

两次尝试最终都会出现以下错误:Uncaught ReferenceError: theValueOfMyItem is not defined

我甚至试过这个:

@foreach (string item in (TempData["Items"] as List<string>))
{
    addItem(item);
}

但正如预期的那样,这给了我错误The name 'addItem' does not exist in the current context

所以我的问题是:

我是否可以使用部分视图中的参数调用JS函数,如果可能,这样做的正确方法是什么?

编辑1

CarstenLøvboAndersen Satpal 的建议之后,我收到以下错误:Uncaught TypeError: addItem is not a function

以下是我定义函数的方法:

function addItem(item) {
    // processing...
}

4 个答案:

答案 0 :(得分:3)

在您的部分视图中,将Items列表转换为Javascript数组并使用javascript for循环调用您的addItem方法。

<script type="text/javascript">
    $(function(){
        var itemArray = @Html.Raw(Json.Encode(TempData["Items"] as List<string>));

        for (var item in itemsArray) {
            //call your javascript method with param item
            addItem(item);
        }
    })
</script>

c#foreach循环的另一个选项

<script type="text/javascript">
        $(function () {
            @foreach (var item in (TempData["Items"] as List<string>))
            {   //your javascript method with param item.
                @:addItem(@item);
            }
        })
</script>

<script type="text/javascript">

    $(function () {
        var itemsArray = [];
        @foreach (var item in (TempData["Items"] as List<string>))
        {
            @:itemsArray.push("@item");
        }


        for (var item in itemsArray) {
            //call your javascript method with param item
            addItem(item);
        }
    })


</script>

答案 1 :(得分:1)

你需要在引号中传递item以作为字符串处理,否则它将被视为变量,因此错误。

<script>addItem("@item");</script>

答案 2 :(得分:1)

在“布局”页面中定义一个部分:

router.POST("/markdown", func(c *gin.Context) {
        body, ok := c.GetPostForm("body")
        if !ok {
            c.JSON(http.StatusBadRequest, "badrequest")
            return
        }
        markdown := blackfriday.MarkdownCommon([]byte(body))
        c.Data(http.StatusOK, "text/html; charset=utf-8", markdown)
    })

现在您可以将代码从Partial直接呈现到

部分
@RenderSection("Scripts", false)

也许你介意阅读这篇文章 http://www.codeguru.com/columns/dotnet/using-sections-and-partials-to-manage-razor-views.htm

答案 3 :(得分:0)

您可以做的是,将您的数据放在全局变量中

 `<script>
    var items = @(TempData["Items"] as List<string>); 
    foreach (var item in items)
    {
        addItem(item);
    }
  </script>`