使用自定义数据而不是 FormCollection 的 C# UpdateModel

标签 c# asp.net-mvc model

作为引用,这是在 C# MVC2 网站中。

我想在我的数据库中使用模型保存数据,但我需要使用自定义数据而不是我习惯的 FormCollection 来保存数据。以下是我通常的做法:

TryUpdateModel(userToUpdate, new string[] { "ID", "Name", "Age", "Gender" }, form.ToValueProvider());

// Model Validation is here, no need to see it so removed to save space

if (ModelState.IsValid)
{
     dbu.SaveChanges();
}

如何用自定义数据替换 form.ToValueProvider()?它应该如何创建/格式化?

最佳答案

您可以通过使用您的值创建一个 NameValueCollection 来创建您自己的源,然后使用它来创建一个 FormCollection,然后您可以使用该表单集合作为值直接提供者。

此外,FormCollection 有一个 Add 方法,您可以在其中直接添加值。

var values = new NameValueCollection { { "ID", "1" }, {"Name": "Bob"} }; // etc.
var collection = new FormCollection(values);

// or...
// var collection = new FormCollection();
// collection.Add("ID", "1");
// collection.Add("Name", "Bob");
// etc.

TryUpdateModel(userToUpdate, new string[] { "ID", "Name", "Age", "Gender" }, form);

如果您要绑定(bind)平面模型(例如,本例中的 User),上面的示例就足够了。但是,如果您的字段有前缀(如果您正在进行深度模型绑定(bind),可能会出现这种情况),请用点分隔前缀:

var collection = new FormCollection();
collection.Add("User.ID", "1");
collection.Add("User.Name", "Bob");

// Binds to fields with the prefix "User"
TryUpdateModel(userToUpdate, "User", new string[] { "ID", "Name", "Age", "Gender" }, null, form);

关于使用自定义数据而不是 FormCollection 的 C# UpdateModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11088774/

相关文章:

c# - MoqVerifyNoOtherCalls() 方法的 NSubstitute 等效项是什么

c# - 在 asp.net Web API 项目中找不到 NinjectWebCommon

c# - Ninject.Web.MVC + MVC3 抛出 StackOverflowException

ruby-on-rails - Rails 应用程序中的非持久数据

c# - 每个线程一个 SQLiteConnection?

c# - 引用类型附加属性 (DependencyProperty) 何时发布?

asp.net-mvc - 跨页面存储信用卡信息的安全方法 ASP.NET MVC

c# - 如何在 Razor 页面上单击按钮下载文件?

model - 使用 zeromq 实现actor模型

php - 使用自定义属性更新 Eloquent 模型