3

作为参考,这是在 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()?应该如何创建/格式化?

4

2 回答 2

4

您可以通过使用您的值创建 a 来创建自己的源NameValueCollection,然后使用它来创建 a 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);

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

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);
于 2012-06-18T18:31:21.863 回答
0

您可以使用 asp.net mvc 提供的 updateModel() 从 formcollection 键值对中获取所有模型值,并映射到您的数据库模型,前提是您的 formcollection 键与模型参数匹配,即

public ActionResult CreateUser(FormCollection fc)
 {

    UserModel usermodel= new UserModel ();

    if(TryUpdateModel(usermodel,fc.ToValueProvider()))

        UpdateModel(usermodel, fc.ToValueProvider());

  return View("UserView"); 
}
于 2018-03-08T07:11:51.010 回答