Javascript 无法从ASP MVC中的视图获取更新的数据

Javascript 无法从ASP MVC中的视图获取更新的数据,javascript,jquery,asp.net-mvc,asp.net-mvc-4,razor,Javascript,Jquery,Asp.net Mvc,Asp.net Mvc 4,Razor,我是新来的ASP MVC。我使用RAZORview引擎创建了一个visual 2013 MVC项目。 这是我的重新分配: 我的名为EmployeeModel的模型类: namespace MvcApplication3.Models { public class EmployeeModel { public int EmpId { get; set; } public string EmployeeName { get; set; }

我是新来的
ASP MVC
。我使用
RAZOR
view引擎创建了一个visual 2013 MVC项目。 这是我的重新分配: 我的名为EmployeeModel的模型类:

namespace MvcApplication3.Models
{
    public class EmployeeModel
    {
        public int EmpId { get; set; }
        public string EmployeeName { get; set; }
        public string EmployeeDep { get; set; }
    }
}
我的控制器类:

using MvcApplication3.Models;
using System.Collections.Generic;
using System.Web.Mvc;

namespace MvcApplication3.Controllers
{
    public class HomeController : Controller
    {
        static List<EmployeeModel> _lstEmployee = new List<EmployeeModel>();

        public ActionResult Index()
        {
            _lstEmployee = GetEmployees();

            return View(_lstEmployee);
        }

        [HttpPost]
        public ActionResult Index(int id, string empName, string empDep)
        {
            _lstEmployee = GetEmployees();
            _lstEmployee[id - 1].EmployeeName = empName;
            _lstEmployee[id - 1].EmployeeDep = empDep;
            return View(_lstEmployee);
        }

        private static List<EmployeeModel> GetEmployees()
        {
            var pvtList = new List<EmployeeModel>();
            var mod1 = new EmployeeModel { EmpId = 1, EmployeeName = "Employee1", EmployeeDep = "Dep1" };
            var mod2 = new EmployeeModel { EmpId = 2, EmployeeName = "Employee2", EmployeeDep = "Dep2" };
            var mod3 = new EmployeeModel { EmpId = 3, EmployeeName = "Employee3", EmployeeDep = "Dep3" };
            var mod4 = new EmployeeModel { EmpId = 4, EmployeeName = "Employee4", EmployeeDep = "Dep4" };
            pvtList.Add(mod1);
            pvtList.Add(mod2);
            pvtList.Add(mod3);
            pvtList.Add(mod4);
            return pvtList;
        }
    }
}
因此,在这里,我的目标分为几个步骤:

1-在表格中显示员工列表-->OK

2-当我按下编辑按钮时,它会以我可以编辑的方式在文本框中显示数据

3-当我按下保存按钮时,我保存最近输入到集合中的数据-->不正常

4-当我再次按下保存按钮时,文本框中输入的数据将显示在div-->NOT OK

我希望通过修改数据集合(本例中是我的模型)实现这一点。我尝试通过
Url.Action
$post-method
执行此操作,但这部分是在internet上找到的一些代码,我不确定

有谁能告诉我,在这种情况下,为了达到我的目标,最有效的做法是什么

如果我仍然使用
url.action
和$.post,有人能给我解释一下这两个cynergy吗

ps:当我尝试调试索引操作的覆盖时,也从未达到

[HttpPost]
public ActionResult Index(int id, string empName, string empDep)
{
 _lstEmployee[id - 1].EmployeeName = empName;
 _lstEmployee[id - 1].EmployeeDep = empDep;
 return View(_lstEmployee);
}

我将非常感谢您的帮助,提前谢谢您。

首先,您不能在Visual studio的java脚本中设置断点。 你必须编写调试器;在javascript代码中。 另一件事是在你的帖子索引方法中。您必须按初始化员工列表
_lstEmployee=GetEmployees()

因为您需要最佳实践使用jQuery通过JavaScript将表单数据发送到操作。以下是我的建议:

像这样扩展您的视图(.cshtml):(只需将您的输入元素(在本例中是您的表)包装成一个表单)

现在最精彩的部分是:你的MVC行动

[HttpPost]
public ActionResult Remove(EmployeeModel model)
{
  _lstEmployee.Remove(model); //This will work if your IEnumerable<EmployeeModel> is an List<EmployeeModel>
  return base.RedirectToAction("Index");
}
[HttpPost]
公共行动结果删除(EmployeeModel模型)
{
_lstmemployee.Remove(model);//如果IEnumerable是一个列表,则此操作有效
返回基。重定向到操作(“索引”);
}

您的视图中似乎没有包含jquery.js文件-控制台中显示了什么错误消息?我编辑了包含该文件的帖子,控制台中没有收到任何错误。。。只是我在文本框中修改的数据在按下保存按钮后不会显示int div…您应该使用Url.Content来避免路径问题:
。当你使用像firebug这样的开发工具时,你看到对SaveEdit()方法的调用了吗?@karouihaythes它必须是一篇ajax文章还是一篇表单文章?@Wolle我是asp新手,所以你能解释一下吗?
[…]你不能从Visual studio在java脚本中设置断点。
。。。先生,这是完全错误的。你为什么知道他没有初始化他的员工?很明显,这是一个私有的全局属性。visual studio的javascript中的断点仅适用于IE。它不适用于chrome或FFE。例如,您也可以在chrome和ff中执行此操作。还有其他一些很酷的功能,比如instand CSS刷新等等……好吧,那我们就忘记javascript中的brak点吧。。。我删除了那一点。。。您能关注jquery plz中的[httpPost]索引方法或$.post调用吗。。。我需要更多的澄清。该计划如何知道要准确解雇哪名员工?在$.post中,您只需调用homeController的remove操作,它将获取要删除的模型的参数。。。但在$.post方法中,没有任何参数或变量告诉您要删除哪个模型或员工。。我真的不明白…:(编辑了我的答案。如果您对每个属性都使用Html.editor,ASP.NET MVC可以轻松地将这些属性映射到您的对象并为您构建它。这甚至可以用于非常复杂/嵌套的模型。这是一种Microsoft voodoo魔法。)。。
[HttpPost]
public ActionResult Index(int id, string empName, string empDep)
{
 _lstEmployee[id - 1].EmployeeName = empName;
 _lstEmployee[id - 1].EmployeeDep = empDep;
 return View(_lstEmployee);
}
<h2>Simple MVC Grid with Row Level Edit & Save</h2>
<table>
  <tr>
    <th>Employee ID</th>
    <th>Employee Name</th>
    <th>Employee Department</th>
    <th>Action</th>
  </tr>
  <tbody>
    @foreach (var m in Model)
    {
    @using(Html.BeginForm(/*set unique id*/))
    {
      <tr>
        <td>@Html.EditorFor(model => m.EmpId)</td>
        <td>@Html.EditorFor(model => m.EmployeeName)</td>
        <td>@Html.EditorFor(model => m.EmployeeDep)</td>
        <td><!--buttons etc--></td>
      </tr>
    }
    }
  </tbody>
</table>
$.post('@Url.Action("Home", "Remove")', $('#/*uniqueformid*/').serialize())
[HttpPost]
public ActionResult Remove(EmployeeModel model)
{
  _lstEmployee.Remove(model); //This will work if your IEnumerable<EmployeeModel> is an List<EmployeeModel>
  return base.RedirectToAction("Index");
}