2

我正在使用带有 Razor 视图引擎的 ASP.NET MVC 4。我正在尝试通过从我的视图中的模型中删除一个项目来从我的 webgrid 中删除一个项目。我认为的模型如下所示:

@model List<MiscCommon.Entities.Person>

我尝试通过 javascript 从此列表中删除一个项目失败了:

function RemovePerson(personId) {
    alert(personId); // Test. This works.
    //var people = '@Model[0].FirstName'; // This is a string. I want the actual model.
    @foreach(var person in Model)
    {
        if (person.Id == @:personId) { // Remove row here }
    }
}

在那个 javascript 函数中,我得到了这个人的正确 ID。如何从模型中删除它?(我希望当从模型中删除该行时,我的 webgrid 会更新。)

4

1 回答 1

3

视图模型在服务器上执行时被处理。它与稍后在客户端上执行的 JavaScript 没有直接关联。您可以在 JS 中混合/匹配 Razor 表达式(正如您所做的那样),但 JS 不会知道模型作为对象的任何信息(除非您告诉它)。

如果您尝试操作一组 ID,您可以通过多种方式执行此操作:

  • 将 data-* 属性添加到包含对象 ID 的表的每一行。

  • 使用 Razor 创建一个 JS 数组声明,其中包含您的 ID 列表。渲染视图时,将渲染数组声明。

  • 包含您需要的数据的隐藏字段

  • AJAX 动作链接

如果您真的想要客户端上的整个模型,您可以将其作为 JSON 字符串序列化到隐藏字段或作为脚本块内的对象文字。但是,通常有更好的方法。

您还可以查看Knockout,它(在我看来)更加强调客户端模型。不过,没有必要解决这个问题。

于 2012-09-06T03:30:54.453 回答