簡體   English   中英

ASP.NET MVC5從局部視圖調用JavaScript函數

[英]ASP.NET MVC5 Call JavaScript function from Partial View

我想從MVC5局部視圖調用向其傳遞參數的JavaScript函數。

我已經在$(document).ready(function {})函數之前在文件頂部的單獨JS文件中聲明了addItem(item) $(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øvboAndersenSatpal的建議,我得到以下錯誤: Uncaught TypeError: addItem is not a function

這是我定義函數的方式:

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

在您的Partial View 1st中,將Items List轉換為Javascript Array,並使用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>

您需要將引號中的item傳遞為字符串,否則將被視為變量,從而導致錯誤。

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

在布局頁面中,定義一個部分:

@RenderSection("Scripts", false)

現在,您可以將您的代碼從Partial直接呈現到該部分

<div>Some DIV</div>
@section Scripts
{
    <script>
        @foreach (string item in (TempData["Items"] as List<string>))
        {
            addItem('@item');
        }
    </script>
}
<div>Some DIV</div>
<!-- You can mix it up. Everything outside of the @section will be treated as normal markup. -->

也許您介意閱讀這篇文章http://www.codeguru.com/columns/dotnet/using-sections-and-partials-to-manage-razor-views.htm

您可以做的是,將數據放在全局變量中

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM