Javascript 更新视图';用于客户端更新的s模型或数据表?
在网页中,当用户从数据表中删除行时,我应该使用视图的模型还是数据表来进行数据操作?(我正在学习MVC4,我不确定访问该模型是否会对服务器造成影响。) 这里有一个我正在尝试做的快速示例。在我的控制器中,我返回一些Person对象:Javascript 更新视图';用于客户端更新的s模型或数据表?,javascript,jquery,asp.net-mvc,asp.net-mvc-4,Javascript,Jquery,Asp.net Mvc,Asp.net Mvc 4,在网页中,当用户从数据表中删除行时,我应该使用视图的模型还是数据表来进行数据操作?(我正在学习MVC4,我不确定访问该模型是否会对服务器造成影响。) 这里有一个我正在尝试做的快速示例。在我的控制器中,我返回一些Person对象: public ActionResult Index() { List<Person> people = new List<Person>(); people.Add(new Person() { Id = 1, FirstName
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" });
// more people here...
return View(people);
}
public ActionResult Index()
{
列表人员=新列表();
添加(newperson(){Id=1,FirstName=“Geddy”,LastName=“Lee”});
添加(newperson(){Id=2,FirstName=“Alex”,LastName=“Lifeson”});
//这里有更多的人。。。
返回视图(人);
}
这是我的视图引用人的方式(视图中的第一行):
@型号列表
在我看来,我正在使用datatables来显示。那部分很好用
在我的javascript函数中,当用户点击表中某一行的delete(x)时,我能够成功地传递ID。但是,我不确定是否应该直接操作数据表(如下所示),或者是否应该修改@model然后刷新数据表。哪种方式被认为是正确的?或者还有其他我不知道的方法吗
function RemovePerson(personIdToDelete) {
var oTable = $('#tablePeople').dataTable();
var rows = oTable.fnGetNodes();
var rowToDelete;
for (var i = 0; i < rows.length; i++) {
var idFromCurrentRow = oTable.fnGetData(i, 1); // ID column
if (idFromCurrentRow == personIdToDelete) {
rowToDelete = i;
}
}
oTable.fnDeleteRow(rowToDelete);
}
函数删除Person(personIdToDelete){
var oTable=$('#tablePeople').dataTable();
var rows=oTable.fnGetNodes();
var rowToDelete;
对于(变量i=0;i
注意:我首先使用模型填充表:
@foreach (var person in Model) {
@:$('#tablePeople').dataTable().fnAddData([@MvcHtmlString.Create(string.Format("'<a href=\"\", onclick=\"RemovePerson({0}); return false;\">x</a>'", @person.Id)), '@person.FirstName', '@person.LastName']);
}
@foreach(模型中的var人员){
@:$(“#tablePeople”).dataTable().fnAddData([@MvcHtmlString.Create(string.Format(“''”,@person.Id)),“@person.FirstName',“@person.LastName]”);
}
最好的方法是使用ViewModel,它是您将传递给视图的内容。因此,它变成:
Database -> Model -> Controller -> ViewModel -> View
然后,当用户更新或删除记录时:
View -> ViewModel -> Controller -> Model -> Database
换句话说,您将创建一个PeopleModel类,该类仅包含视图所需的属性。您的
@model
仅存在于服务器端。呈现DOM并将其发送到客户端后,@model将被释放。您需要再次联系服务器,让数据库知道应该删除该记录。您有两个选项可以执行此操作:
选项一
通过AJAX在Javascript中执行RemovePerson
功能时与服务器联系
选项二
将整个页面发布回服务器并解析结果。这需要将表包装成表单
,并为每一行输入数据
我更喜欢使用选项一并使用找到的
jQuery.ajax()
方法。因此,在编辑javascript中的人员列表时,我应该编辑@model
(在视图中)还是数据表?当你说ViewModel时,这和视图中的@model
是一样的吗?
View -> ViewModel -> Controller -> Model -> Database