Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更新视图';用于客户端更新的s模型或数据表?_Javascript_Jquery_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

Javascript 更新视图';用于客户端更新的s模型或数据表?

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

在网页中,当用户从数据表中删除行时,我应该使用视图的模型还是数据表来进行数据操作?(我正在学习MVC4,我不确定访问该模型是否会对服务器造成影响。)

这里有一个我正在尝试做的快速示例。在我的控制器中,我返回一些Person对象:

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