簡體   English   中英

在razor代碼下檢查javascript中的viewbag null

[英]Check viewbag null in javascript under razor code

我將null傳遞給RepresentativeTypesList viewbag,但是我試圖理解為什么這行

if ('@representativeTypesList' != null)

評估不正確,並且光標直接移到下面視圖的Html.Raw部分。 我相信我正確輸入了@轉義字符。 任何幫助將不勝感激。

@{
    var representativeTypesList = @ViewBag.RepresentativeTypesList;
}

@section Header {

    <script type="text/javascript">

        if ('@representativeTypesList' != null)            
        {
            var array1 = '@Html.Raw(
                Json.Encode(
                    ((IEnumerable<RepresentativeTypesModelView>)ViewBag.RepresentativeTypesList).Select(item => new
                    {
                        itemValue = (item.Value == null ? "" : item.Value),
                        itemText = (item.Name == null ? "" : item.Name)
                    })
                )
            )';
            hdninput1 = $("#txtSalesReps_hdn");
            dropdown1 = $("#selSalesReps");
            dropdown1.append($("<option />").val('default').text('-- '@lbls.lblSelectOption' --'));
            if (array1.length > 0)
            {
                $.each(array1, function() {
                    dropdown1.append($("<option />").val(this.itemValue).text(this.itemText));
                });
            }
        }
    </script>
}

可能會刪除@representativeTypesList兩側的刻度線,可能是因為它將字符串評估為不為null而不是將變量評估為null。

剃刀僅用於創建初始標記。 呈現頁面后(即,一旦在客戶端中運行javascript,而不是在服務器上進行准備), '@representativeTypesList'將被視為呈現時存在的硬編碼字符串,它將不會被呈現。視為JavaScript變量。

相反,為什么不聲明一個javascript變量並使用Razor設置其初始值:

var repTypesList = @representativeTypesList;
if (repTypesList !== null)  {
    ...
}

然后,您可以在運行時等更改值。

您可以簡單地將ViewBag對象傳遞到代碼中而無需先將其強制轉換為變量嗎? 除非有特定原因需要這樣做,否則該方法應該起作用。 正如Elemente Pete所說,Razor僅用於創建初始標記。 剃刀永遠不會發送到瀏覽器。 它在服務器上處理。 然后,它將以HTML,CSS,JS代碼呈現要呈現的內容,然后將其發送到瀏覽器。 然后,瀏覽器運行JS代碼。 那樣想你的代碼,我會嘗試替換

如果('@representativeTypesList'!= null)

如果(@ ViewBag.RepresentativeTypesList!= null)

希望有幫助!

賈森

在此使用JavaScript中的Razor給出了解決方案。 由於我的代碼在js部分中,因此需要用“文本”標簽包圍。 謝謝。

我只是在我的代碼中嘗試了以下方法,但它確實有效。 將此與您的代碼進行比較。

在控制器中:

public ActionResult SomeMethod(int id)
{
     ViewBag.RepresentativeTypesList = null;
}

在視圖中:

@{
    var representativeTypesList = ViewBag.RepresentativeTypesList;
}

@section Header {
    <script type="text/javascript">

        if ('@representativeTypesList' != null)
        {
            if (array1.length > 0)
            {
                $.each(array1, function() {
                    dropdown1.append($("<option />").val(this.itemValue).text(this.itemText));
                });
            }
        }
    </script>
}

我必須修改if語句中的代碼,因為我沒有您擁有的某些對象,但是當我運行它時,它跳過了if語句,並且沒有運行任何對象。

如果您有任何疑問,請告訴我!

賈森

另外,如果此方法或您在此處遇到的問題的任何解決方案有效或有所幫助,請確保將答案標記為正確的答案(如果不是您的問題),或者如果答案是有益的,請單擊向上箭頭以表明答案是正確的。有用。 謝謝! :)

暫無
暫無

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

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