【问题标题】:JavaScript alert works with int but not stringJavaScript 警报适用于 int 但不适用于字符串
【发布时间】:2012-09-06 02:26:52
【问题描述】:

当调用一个 javascript 函数时,它只有在我传入一个 int 时才有效。如果我传入一个字符串,它会失败。

例如,这是我的控制器,我在其中将人员列表传递给视图。

public ActionResult Index()
{
    List<Person> people = new List<Person>();
    people.Add(new Person() { Id = 1, FirstName = "Geddy", LastName = "Lee" });
    people.Add(new Person() { Id = 2, FirstName = "Alex", LastName = "Lifeson" });

    return View(people);
}

在视图中,我有这个javascript函数:

function RemovePerson(firstName) {
    alert(firstName);
}

我的 webgrid 有一列允许用户删除一个人:

gridPeople.Column(header: "", columnName: "",
    format: (person) => MvcHtmlString.Create(string.Format(
    "<a href='' onclick='RemovePerson({0}); return false;'>x</a>",
    person.FirstName))),      

如上所示,当我单击 x 删除一个人时,出现此错误:

Uncaught Reference Error: Geddy is not defined

为什么?

如果我将 javascript 更改为接受 int:

function RemovePerson(personId) {
    alert(personId);
}

并实际传递 int:

gridPeople.Column(header: "", columnName: "",
    format: (person) => MvcHtmlString.Create(string.Format(
    "<a href='' onclick='RemovePerson({0}); return false;'>x</a>",
    person.Id))), 

它正确地显示了一个带有 int 值的消息框。那么为什么在传递 int 而不是名称时这会起作用?

【问题讨论】:

  • 我的猜测是您需要将字符串括在引号中,否则您的函数会尝试将其评估为变量
  • 发布客户实际收到的内容通常会有所帮助。这样可以根据实际输出修复错误,而不是解释源代码的可能输出。
  • @RobG 你是说发布页面源代码吗?
  • 是的,但只是相关的部分(例如 A 元素的 HTML),而不是全部。
  • "如果我将 javascript 更改为接受 int function RemovePerson(personId){... " - 请注意,您尚未将 JS 更改为 接受 an int:将RemovePerson() 的参数名称从firstName 更改为personId 没有区别。你所改变的是你用一个号码调用它。

标签: c# javascript asp.net asp.net-mvc razor


【解决方案1】:

原因是需要将字符串变量用引号括起来。

未捕获的引用错误:Geddy 未定义

这意味着它认为您指的是一个名为 Geddy 的变量,而不是字符串文字 "Geddy"

这是你使用的:

string.Format("<a href='' onclick='RemovePerson(\"{0}\"); return false;'>x</a>",
person.Id)

【讨论】:

  • 做到了,但我不能使用""{0}"",我必须使用\"{0}\"
  • 你知道我是否应该能够将 Person 对象实际传递给 javascript 方法吗? function RemovePerson(person) { alert(person.FirstName); }
  • @BobHorn onclick='RemovePerson(@Html.Raw(Json.Encode(person)))';(那里不需要引号,因为您发送的是 JSON 对象而不是字符串文字。
【解决方案2】:

另外,

string.Format("<a href='' onclick='RemovePerson(\"{0}\"); return false;'>x</a>",

person.FirstName);

要严格,请使用

person.FirstName.Replace("\"", "\\\"")

【讨论】:

    猜你喜欢
    • 2023-01-11
    • 1970-01-01
    • 2017-01-06
    • 2018-11-21
    • 2019-12-23
    • 2017-03-25
    • 1970-01-01
    • 1970-01-01
    • 2012-08-20
    相关资源
    最近更新 更多