我想从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函数,如果可能,这样做的正确方法是什么?
在CarstenLøvboAndersen和 Satpal 的建议之后,我收到以下错误:Uncaught TypeError: addItem is not a function
。
以下是我定义函数的方法:
function addItem(item) {
// processing...
}
答案 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>`