模型属性未显示在“详细信息”页面中ASP.NET MVC 5

时间:2015-06-07 12:13:34

标签: c# asp.net-mvc asp.net-mvc-5 model-binding

我遇到问题,我的MPCompanyName类属性不会显示在我的ASP.NET MVC 5项目的Ratings详细信息页面中。

我在这个视图中使用了两个模型。 MP类是Ratings类的外键。

型号:Ratings

 public class Ratings
{
    //Rating Id (PK)
    public int Id { get; set; }

    [DisplayName("User Name")]            
    public string UserId { get; set; }

                 //Medical Practice (FK)
                 public int MpId { get; set; }
                 public MP MP { get; set; }

    //User ratings (non-key values)

    [DisplayName("Wait Time")]
    [Required] //Adding Validation Rule
    public int WaitTime { get; set; }

    [Required] //Adding Validation Rule
    public int Attentive { get; set; }

    [Required] //Adding Validation Rule
    public int Outcome { get; set; }


}

控制器:RatingsController

        // GET: Ratings/Details/5
    public ActionResult Details(int? id)
    {

        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Ratings ratings = db.Ratings.Find(id);
        if (ratings == null)
        {
            return HttpNotFound();
        }

       MP CompanyName = db.MedicalPractice.Find(id);

        return View(ratings);
    }

评级视图:详情

    <dl class="dl-horizontal">
    <dt>
        @Html.DisplayNameFor(model => model.MP.CompanyName)
    </dt>

    <dd>
        @Html.DisplayFor(model => model.MP.CompanyName)
    </dd>

    <dt>
        @Html.DisplayNameFor(model => model.UserId)
    </dt>

    <dd>
        @Html.DisplayFor(model => model.UserId)
    </dd>

    <dt>
        @Html.DisplayNameFor(model => model.WaitTime)
    </dt>

    <dd>
        @Html.DisplayFor(model => model.WaitTime)
    </dd>

    <dt>
        @Html.DisplayNameFor(model => model.Attentive)
    </dt>

    <dd>
        @Html.DisplayFor(model => model.Attentive)
    </dd>

    <dt>
        @Html.DisplayNameFor(model => model.Outcome)
    </dt>

    <dd>
        @Html.DisplayFor(model => model.Outcome)
    </dd>

</dl>

2 个答案:

答案 0 :(得分:0)

您实际上从未对此值执行任何操作:

code

没有代码可以访问它,一旦方法存在,值就消失了。当您尝试访问视图中的值时:

description

您正在尝试访问模型上的属性,但您从未在模型上设置该属性。

据推测,根据代码/描述,您打算做的是:

MP CompanyName = db.MedicalPractice.Find(id);

这将在@Html.DisplayFor(model => model.MP.CompanyName) 对象(您的模型)上设置ratings.MP = db.MedicalPractice.Find(id); 属性,并允许您在视图中访问该属性。

在您的情况下,细节可能会略有不同,因为您的对象结构和命名约定有点不清楚。但重点是您需要在模型上设置属性才能从模型中读取它们。该模型不会了解您在控制器方法中创建的其他变量。

答案 1 :(得分:0)

使用.Include简单地使用Details方法:

// GET: Ratings/Details/5
public ActionResult Details(int? id)
{

    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    Ratings ratings = db.Ratings.Find(id).Include("MP");
    if (ratings == null)
    {
        return HttpNotFound();
    }       

    return View(ratings);
}