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

なんで?

int を受け入れるように JavaScript を変更すると、次のようになります。

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);

厳密にするには、使用します

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