错误 1061。T 不包含 <propertyName> 的定义
error 1061. T doesn't contain a definition for <propertyName>
我有大约 7 个具有相同属性(特性)的模型。在视图页面上,我正在使用一个包含所有这些属性的模型(name = commonModel)和一个额外的 属性 来选择我想在哪个模型的数据库中保存发送的数据,所以我创建了一个 valuesRelocate 方法,它将分配所有commonModel 的属性到所选模型(在本例中为文章)。
我在下面给出的代码有效,但是在将 commonModel 的 属性 的值分配给 article 的 属性 时出现错误。
什么是更好的方法来做到这一点。
错误在 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 的抽象基础 class。class 的代码如下所示
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; }
}
上面显示的是基础 class
下面显示的是派生的 classes
我使用不同的 classes 是因为我想对不同的语法概念使用不同的 classes。
public class article : baseGrammar
{
}
public class commonModel : baseGrammar
{
[Required]
public string modelSelector { get; set; }
}
希望这对您有所帮助。
您只需要约束类型参数T
从您的基础派生class:
// Names changed to follow .NET naming conventions
private T RelocateValues<T>(BaseGrammar baseModel, T tempModel)
where T : BaseGrammar
{
tempModel.question = baseModel.question;
return tempModel;
}
但是,鉴于您正在修改传入模型,您可以删除 return 值并将方法更改为:
private void RelocateValues(BaseGrammar from, BaseGrammar to)
{
to.question = from.question;
}
然后在你的调用代码中:
Article model = new Article();
RelocateValues(model);
db.ArticleDb.Add(model);
没有必要有两个单独的变量来引用同一个对象...
我有大约 7 个具有相同属性(特性)的模型。在视图页面上,我正在使用一个包含所有这些属性的模型(name = commonModel)和一个额外的 属性 来选择我想在哪个模型的数据库中保存发送的数据,所以我创建了一个 valuesRelocate 方法,它将分配所有commonModel 的属性到所选模型(在本例中为文章)。 我在下面给出的代码有效,但是在将 commonModel 的 属性 的值分配给 article 的 属性 时出现错误。 什么是更好的方法来做到这一点。 错误在 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 的抽象基础 class。class 的代码如下所示
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; }
}
上面显示的是基础 class 下面显示的是派生的 classes 我使用不同的 classes 是因为我想对不同的语法概念使用不同的 classes。
public class article : baseGrammar
{
}
public class commonModel : baseGrammar
{
[Required]
public string modelSelector { get; set; }
}
希望这对您有所帮助。
您只需要约束类型参数T
从您的基础派生class:
// Names changed to follow .NET naming conventions
private T RelocateValues<T>(BaseGrammar baseModel, T tempModel)
where T : BaseGrammar
{
tempModel.question = baseModel.question;
return tempModel;
}
但是,鉴于您正在修改传入模型,您可以删除 return 值并将方法更改为:
private void RelocateValues(BaseGrammar from, BaseGrammar to)
{
to.question = from.question;
}
然后在你的调用代码中:
Article model = new Article();
RelocateValues(model);
db.ArticleDb.Add(model);
没有必要有两个单独的变量来引用同一个对象...