0

调用 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 而不是名称时这会起作用呢?

4

2 回答 2

4

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

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

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

这是您使用的:

string.Format("<a href='' onclick='RemovePerson(\"{0}\"); return false;'>x</a>",
person.Id)
于 2012-09-06T02:29:49.127 回答
0

除了,

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

人名);

严格来说,使用

person.FirstName.Replace("\"", "\\\"")
于 2012-09-06T02:46:13.347 回答