错误 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);

没有必要有两个单独的变量来引用同一个对象...