代码之家  ›  专栏  ›  技术社区  ›  Bob Horn

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

  •  0
  • Bob Horn  · 技术社区  · 14 年前

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

    2 回复  |  直到 14 年前
        1
  •  4
  •   McGarnagle    14 年前

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

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

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

    以下是您使用的内容:

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

    此外

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

    person.FirstName);

    严格来说,使用

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