我有大约7个具有相同属性(属性)的模型。在视图页面上,我使用的是一个模型(name = commonModel),它包含所有这些属性和一个额外的属性,可以选择我要保存哪个模型的数据库发送数据,所以我创建了一个valuesRelocate方法,它将commonModel的所有属性分配给选择的模型(在这种情况下是文章)。 我在下面给出的代码是有效的,但是当我将commonModel属性的值赋给文章的属性时,我遇到了错误。 有什么更好的方法来做到这一点。 错误发生在tempModel.question
public ActionResult Create([Bind(Include =
"Id,question,ans,ruleApplicable,hint,exception,modelSelector")]
commonModel commonModel)
{
if (ModelState.IsValid)
{
if (commonModel.modelSelector == "article")
{
article model2 = new article();
article model1 = valuesRelocate<article>(commonModel,
model2);
db.articleDb.Add(model1);
db.SaveChanges();
return RedirectToAction("Index");
}
}
return View(commonModel);
}
private T valuesRelocate<T>(commonModel commonModel, T tempModel) {
tempModel.question = commonModel.question;
return tempModel;
}
我正在使用一个名为baseGrammar的抽象基类。该类的代码如下所示
public abstract class baseGrammar
{
[Key]
public int Id { get; set; }
[Required]
public string question { get; set; }
[Required]
public string ans { get; set; }
public string ruleApplicable { get; set; }
public string hint { get; set; }
public bool exception { get; set; }
}
上面显示的是基类 下面显示的是派生类 我使用不同的类,因为我想为不同的语法概念设置不同的类。
public class article : baseGrammar
{
}
public class commonModel : baseGrammar
{
[Required]
public string modelSelector { get; set; }
}
希望这会有所帮助。
答案 0 :(得分:1)
您只需要约束从您的基类派生的类型参数T
:
// Names changed to follow .NET naming conventions
private T RelocateValues<T>(BaseGrammar baseModel, T tempModel)
where T : BaseGrammar
{
tempModel.question = baseModel.question;
return tempModel;
}
但是,鉴于您正在修改传入的模型,您可以删除返回值,只需将方法更改为:
private void RelocateValues(BaseGrammar from, BaseGrammar to)
{
to.question = from.question;
}
然后在你的主叫代码中:
Article model = new Article();
RelocateValues(model);
db.ArticleDb.Add(model);
无论如何都不需要有两个独立的变量引用同一个对象...