【问题标题】:MVC3 ASP.NET Objects within viewmodels? [closed]视图模型中的 MVC3 ASP.NET 对象? [关闭]
【发布时间】:2012-02-29 11:12:06
【问题描述】:

抱歉,没关系,我解决了我的问题。我当时很愚蠢 >

感谢所有试图提供帮助的人。 :)

我正在尝试将视图模型从我的控制器传递给我的视图。我有一个基本的 ViewModel 工作,其中包含字符串/整数等简单的东西,但现在我想在我的视图模型中传递一个对象。我已对视图模型进行了适当的更改以现在包含此对象,但我正在努力检索视图中的数据。

编辑:

抱歉没有全部发布!

这是完整的:

public class StockTakeViewModel
{
    PartsViewData partsViewData = new PartsViewData();

    public StockTakeViewModel(PartsViewData PartsViewData)
    {
        partsViewData = PartsViewData;
    }
}

public class PartsViewData
{
    public string PartNum { get; set; }
    public string Issue { get; set; }
    public string Location { get; set; }
    public string BinCode { get; set; }
    public decimal StockQty { get; set; }

    public PartsViewData()
    {
    }
}


public class HomeController : Controller
{
    public ActionResult Index()
    {
        PartsViewData partsViewData = new PartsViewData();

        partsViewData.PartNum = "Part Num Test";
        partsViewData.Issue = "Issue Test";
        partsViewData.BinCode = "Bin Code Test";
        partsViewData.Location = "Location Test";
        partsViewData.StockQty = 0;

        StockTakeViewModel stockTakeViewModel = new StockTakeViewModel(partsViewData);

        return View(stockTakeViewModel);
    }
}

查看:

@model StockTake.Controllers.StockTakeViewModel

因此,我希望从这里访问零件视图数据,例如:

@Model.StockTakeViewModel.PartsViewData.PartNum

但 StockTakeViewModel 甚至没有出现。

谢谢!

【问题讨论】:

  • 你能发布视图模型的代码吗?
  • 向我们展示您的视图模型的代码
  • 多一点代码源应该可以弄清楚当前的情况。控制器动作和视图代码就可以了。
  • 我有点担心您的模型在您的控制器文件夹中,但除此之外,请发布您模型的代码。
  • @user1157885:你能详细说明你的问题吗?您是否无法为字符串类型以外的成员获取智能感知,或者无法在视图上显示数据?另请确保这些属性具有公共访问权限。

标签: asp.net asp.net-mvc-3 viewmodel


【解决方案1】:

您必须在 ViewModel 中将 partsViewData 声明为公共属性

【讨论】:

    【解决方案2】:

    试试这个:

    @Model.PartsViewData.PartNum
    

    您传递给View(...) 的对象是模型,但您正在调用Model.StockTakeViewModel.PartsViewData.PartNum(假设模型是基于传递给View(...) 的类型名称以某种方式包装的)。

    如果您在视图中添加@typeof(Model).Name,它将显示StockTakeViewModel

    【讨论】:

      【解决方案3】:

      将您的 StockTakeViewModel 更改为:

      public class StockTakeViewModel
      {
          PartsViewData partsViewData = new PartsViewData();
          public PartsViewData PartsViewData
          {
              return this.partsViewData;
          }
      
          public StockTakeViewModel(PartsViewData PartsViewData)
          {
              partsViewData = PartsViewData;
          }
      }
      

      【讨论】:

        【解决方案4】:

        虽然我无法回答您的问题,因为它没有得到充分解释,但我想建议您,您违反了 ASP.NET MVC 模板规定的关注点的明确分离,因为您将模型保留在内部控制器文件夹/命名空间。即使是为了实验也以正确的结构分离/组织组件将增加对应用程序结构的可读性和理解。

        【讨论】:

        • 应该一直删除它..
        猜你喜欢
        • 1970-01-01
        • 2013-03-27
        • 2013-03-25
        • 1970-01-01
        • 1970-01-01
        • 2011-08-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多