C#使用自定义数据而不是FormCollection更新模型

C#使用自定义数据而不是FormCollection更新模型,c#,asp.net-mvc,model,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 s

这是一个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();
}

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

您可以通过使用您的值创建
NameValueCollection
来创建自己的源代码,然后使用它创建
FormCollection
,然后您可以直接将该表单集合用作值提供程序

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);
另外,
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);
您可以使用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"); 
}

做普通插入而不是TryUpdateModel的最好方法是什么?是否有一个等价的,这样我就可以在表单集合中使用几乎相同的代码?我不知道你所说的简单插入是什么意思。我想插入一个新记录,而不是更新现有记录。所以类似于tryInsertModel的东西(编造出来的,但你得到了这个想法)。