在加载文档后,在JS功能中渲染Razor代码

时间:2016-07-19 06:03:08

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

$("body").on("click", "#ActionButton", function (e) {
            //set current select index
            currentBook = $(this).attr("data-bookId");
            //set title

            $("#BookAction .modal-title").text('@Model[currentBook].BookName');
            //get list of current book forms
            @{List<XLEZ.Models.DataModels.FormModel> CurrentFormsList = Model[currentBook].FormList;}


            swap('FillNewData', true);// collapse fill new data list if expanded
            $("#FillNewData").empty();
            @for (int k = 0; k < CurrentFormsList.Count; k++)
            {<text>
            var html = "<li onClick=\"SubmitForm('@CurrentFormsList[k].FormLink','@CurrentFormsList[k].FormHideExtraValue','@Model[currentBook].FormActionLink')\" class=\"list-group-item bg-grey-300\" > @Html.Raw(CurrentFormsList[k].FormName) </li>";
            $(html).appendTo("#FillNewData");</text>
            }

        });

我使用上面的代码通过使用模型中的数据提交表单。问题是我想在页面加载后用户进行选择。但剃刀代码在文档准备好之前呈现,当我单击此按钮时,模型的0索引上的数据将加载到此脚本中。无论如何我可以在这个函数中遍历模型吗?

1 个答案:

答案 0 :(得分:1)

您无法将JavaScript变量传递/转换为Razor变量。 Razor变量由Razor引擎<​​/ em>处理,其中 JavaScript另一方面是在客户端上运行的客户端语言。

Razor是在服务器上运行的ASP.NET MVC框架使用的视图引擎,用于生成一些HTML模板。

但是,您可以使用Json.Encode方法将数据对象转换为JavaScript Object Notation(JSON)格式的字符串。然后使用它执行操作。

//Convert Model to JSON 
var model = @Html.Raw(Json.Encode(Model)); 

$("body").on("click", "#ActionButton", function (e) {
    //set current select index
    currentBook = $(this).attr("data-bookId");
    //set title

    $("#BookAction .modal-title").text(model[currentBook].BookName);

    //get list of current book forms
    var currentFormsList = model[currentBook].FormList;

    // collapse fill new data list if expanded
    swap('FillNewData', true);
    $("#FillNewData").empty();  

    for (int k = 0; k < currentFormsList.length; k++)
    {
        //Create link
        $('<li />')
            .addClass("SubmitForm list-group-item bg-grey-300")
            .data('FormLink', currentFormsList[k].FormLink)
            .data('FormHideExtraValue', currentFormsList[k].FormHideExtraValue)
            .data('FormActionLink', model[currentBook].FormActionLink)
            .html(currentFormsList[k].FormName)
            .appendTo("#FillNewData");
    }
});

$("#FillNewData").on('click', 'li.SubmitForm', function(){
    SubmitForm(
        $(this).data('FormLink'),
        $(this).data('FormHideExtraValue'),
        $(this).data('FormActionLink'),
    )
})