JavaScript警报适用于int但不适用于字符串

时间:2012-09-06 02:26:52

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

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

2 个答案:

答案 0 :(得分:4)

原因是你需要将字符串变量包装在引号中。

  

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

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

以下是您使用的内容:

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

答案 1 :(得分:0)

此外,

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

person.FirstName);

要严格,请使用

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