错误1061. T不包含<propertyname>

时间:2017-07-23 11:08:16

标签: c# asp.net-mvc generics controllers

我有大约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; }
}

希望这会有所帮助。

1 个答案:

答案 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);

无论如何都不需要有两个独立的变量引用同一个对象...