JavaScript警报适用于int,但不适用于string

JavaScript alert works with int but not string

本文关键字:适用于 不适用 string int JavaScript      更新时间:2023-09-26

当调用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);
}

我的网络网格有一个列,允许用户删除一个人:

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而不传递名称时,为什么这会起作用呢?

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

未捕获参考错误:未定义Geddy

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

以下是您使用的:

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

此外,

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

person.FirstName);

严格来说,使用

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