【问题标题】:Editing form fields via ajax and .net mvc通过 ajax 和 .net mvc 编辑表单字段
【发布时间】:2012-02-27 22:26:26
【问题描述】:

我的页面上有许多输入。我想在输入模糊上保存对模型的更改,以便在更改每个输入的值时将其保存回服务器,例如 Google 联系人。

<input id="FirstName" name="FirstName">Jack</input>

我使用 jquery 创建了一个模糊事件以将值发布回服务器。它发布一个包含输入名称、值和实体 ID 的结构。

$.post(url, { id: "2", key: "FirstName", value: "Jack" }, successFuction);

在我的控制器中,我有:

public ActionResult EditField(int id, string key, string value)

然后我使用带有 id 的 EntityFramework 检索实体。然后我想更新该字段的模型属性。

var entity = _db.Get(id);
entity[key] = value;
return Content "Success";

这显然是我做不到的!我能想到的唯一方法是每个字段都有多种方法,所以EditNameEditAddress 等似乎是错误的。我希望这个方法能够处理模型的每个属性。

有什么更好的方法来构建控制器而不是为每个单独的字段编写多个方法?

【问题讨论】:

  • What is a good way to achieve what I want to do? -> 你想做什么?
  • 保存值。我不想为每个字段写一个方法。
  • 您的问题似乎与您正在使用的数据库访问技术(我猜是 EF)和 jQuery 相关,而不是与 ASP.NET MVC 相关。请适当地标记您的问题。事实上,我根本不明白这与 ASP.NET MVC 有什么关系。
  • 我不会这么说的。问题是关于如何构建控制器。我如何获取或保存数据并不重要。我只是想更改模型上的属性。这可能都在内存中,我也会遇到同样的问题,不是吗?

标签: c# javascript asp.net-mvc-3


【解决方案1】:
  1. 您可以将整个表单(例如名字、姓氏等)张贴在您的任何字段的每个模糊部分(这应该没问题,因为您在用户在表单上进行时保存所有更改)。除非您真的想节省字节,否则发布整个表单似乎没问题。
  2. 您可以只发布字段名称,然后使用反射来查找对象的属性并设置值。

【讨论】:

  • 我什至没有想过要发布整个表格。不过,改变一个领域似乎有点矫枉过正。使用反射不是真的很慢吗?另外,对于我认为很受欢迎的东西来说,它似乎真的很hacky
  • @Terry - 就我个人而言,我不会使用反射,我只会发布整个表单。它直观且易于实现,除非存在很大的性能缺陷,否则这对我来说始终是获胜的方案。这两种情况的表现如何由您来测试,但除非您在具有大量吞吐量的网站上工作,否则这两种解决方案中的任何一种都可以正常运行。
【解决方案2】:

如果您愿意以一般方式对实体进行建模,我认为您可以做到:

public class FieldEntity {
    public int Id { get; set; }
    public string Key { get; set; }
    public string Value { get; set; }
}

然后在上下文中使用它,例如:

var fieldEntity = db.Find(id);
fieldEntity.Key = key;
fieldEntity.Value = value;
db.SaveChanges();

但是,通常最好以有意义的方式构造数据。在您描述的示例中,您可能有一个 PersonAddress 实体。那么为什么不拥有一个具有Address 属性的Person 实体呢?

【讨论】:

  • 重点是一种方法可以处理所有字段。所以我可以发布 { key: "Address", value: "Blah" } 并更新模型的地址属性。
  • 那么@Ek0nomik 为您指明了正确的方向。在字段级别,您可以使用反射。
猜你喜欢
  • 1970-01-01
  • 2017-07-25
  • 1970-01-01
  • 2013-09-04
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 2023-04-05
相关资源
最近更新 更多