使用JavaScript操纵Razor模型

时间:2012-09-06 03:22:59

标签: javascript asp.net razor

我正在使用带有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会更新。)

1 个答案:

答案 0 :(得分:3)

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

如果您尝试操作一组ID,可以采用以下方法:

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

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

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

  • AJAX操作链接

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

您还可以查看Knockout,(我认为)更加重视客户端模型。但是,没有必要解决这个问题。