我正在使用带有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会更新。)
答案 0 :(得分:3)
在服务器上执行视图模型时,将处理该模型。它与稍后在客户端上执行的JavaScript没有直接关联。你可以在你的JS中混合/匹配Razor表达式(正如你所做的那样),但JS不会将模型作为对象知道任何事情(除非你告诉它)。
如果您尝试操作一组ID,可以采用以下方法:
将data- *属性添加到包含对象ID的表的每一行。
使用Razor创建一个JS数组声明,其中包含您的ID列表。渲染视图时,将呈现数组声明。
包含您需要的数据的隐藏字段
AJAX操作链接
如果您真的想在客户端上使用整个模型,可以将其作为JSON字符串序列化为隐藏字段或作为脚本块内的对象文字。然而,通常有更好的方法。
您还可以查看Knockout,(我认为)更加重视客户端模型。但是,没有必要解决这个问题。