基类中的属性没有出现在视图模型中

本文关键字:模型 视图 属性 基类 | 更新日期: 2023-09-27 17:50:04

我有一个基类,看起来有点像这样:

public class EformBase
{
    public decimal Latitude { get; set; }
    public decimal Longitude {get;set;}
    // lots of other properties here
}

和如下的派生类:

public class GraffitiViewModel : EformBase
{
    public RadioButtonList<YesNoType> GraffitiOffensive { get; set; }
    public RadioButtonList<YesNoType> GraffitiTag { get; set; }
    // other properties here
}

我使用这个类作为MVC中的视图模型。不幸的是,当视图模型被发回时,基类中的属性没有出现在视图模型中。这样的:

[HttpPost]
public ActionResult Index(GraffitiViewModel vm)
{
   // add to database code
}

vm,当发送回此操作时,不包含在基类中指定的经度和纬度。我错过了什么?要包含基类,我必须做一些特殊的事情吗?

基类中的属性没有出现在视图模型中

不幸的是,你的帖子没有提到如果你(或不)使用两个属性(纬度和经度)在你的视图

另外,当你提到:不幸的是,当视图模型被发回时,基类中的属性并没有出现在视图模型中。

你的意思是你没有看到这两个属性?

你的意思是你看到两个属性,但值是空的吗?

考虑下面的代码示例:

ViewModel和基类:

public class MyViewModel : MyBaseViewModel
{
    public string A { get; set; }
    public string B { get; set; }
    public string C { get; set; }
    public string D { get; set; }
}
public class MyBaseViewModel
{
    public string Z { get; set; }
}

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new MyViewModel();
        return View(model);
    }
    [HttpPost]
    public ActionResult Index(MyViewModel myViewModel)
    {
        var z = myViewModel.Z;
        return null;
    }
}

视图:

@model MvcApplication1.Models.MyViewModel
@using (Html.BeginForm()) {
    <fieldset>
        <legend>MyViewModel</legend>
        <div class="editor-label">@Html.LabelFor(model => model.A)</div>
        <div class="editor-field">@Html.EditorFor(model => model.A)</div>
        <div class="editor-label">@Html.LabelFor(model => model.B)</div>
        <div class="editor-field">@Html.EditorFor(model => model.B)</div>
        <p><input type="submit" value="Create" /></p>
    </fieldset>
}

注意视图是如何只使用属性A和属性b的

当我提交<form>并在控制器内的[HttpPost]方法上放置一个断点时,我可以查看我为文本框a和文本框b输入的值。

但是由于我没有文本框C和文本框d,这些属性将被设置为null。

同样地,属性Z恰好是在我的基类中定义的。

因为属性Z没有在我的<form>中使用,当我提交它时,我将得到null作为值。

为了在提交<form>时查看属性Z,您必须将其添加到<form>...</form>中,如下所示:

<div class="editor-label">@Html.LabelFor(model => model.Z)</div>
<div class="editor-field">@Html.EditorFor(model => model.Z)</div>