如何同时使用TModel和自定义模型或可以替代?

时间:2019-08-19 06:05:07

标签: asp.net asp.net-mvc-5

我正在使用asp.net mvc。
在视图中,

@using System.Data

<table>
   <thead>
       <tr>
           @foreach (DataColumn col in Model.Columns)
           {
               <th>@col.ColumnName</th>
       }
   </tr>
   </thead>
   <tbody>
           @foreach (DataRow row in Model.Rows)
           {
              <tr>
               @foreach (DataColumn col in Model.Columns)
                  {
                   <td>@row[col.ColumnName]</td>
                  }
            </tr>
          }
      </tbody>

喜欢使用Model.ColumnsModel.Rows

我想使用myModel

所以在顶部写代码

@model myprojectname.Models.ItemViewModel

然后我得到一个错误

  

Model.Columns指向ItemViewModel(无意图)

但是我想使用ItemViewModel

我的问题是如何使用myViewModel

不影响

@foreach (DataColumn col in Model.Columns)

这部分

如果没有,那么我将硬编码(添加部分)或(此foreach部分)


添加

ItemViewModels.cs

public class ItemViewModel
{
    public string item_id { get; set; }
    //public string item_type { get; set; }
    public string item_name { get; set; }
    public string user_name { get; set; }
    public string location { get; set; }
    public string model_name { get; set; }
    public string manufacturer { get; set; }
    public string serial_number { get; set; }
    public string serial_number2 { get; set; }
    public string specifications { get; set; }
    public DateTime date_of_manufacture { get; set; }
    public DateTime date_of_purchase { get; set; }
    public string note { get; set; }
    public int state { get; set; }
    public ItemTypes item_type { get; set; }

    public ItemState item_state { get; set; }

    public enum ItemTypes
    {
        PC_데스크탑 = 'D',
        네트워크장비 = 'Z',
        노트북 = 'N',
        맥북 = 'N',
        모니터 = 'M',
        모바일 = 'P',
        백업장비 = 'S',
        타블렛 = 'W',
        태블릿 = 'T',
        키보드 = 'K',
        마우스 = 'U'
    }

    public enum ItemState
    {
        사용 = 1,
        미사용 = 2,
        AS대기 = 3,
        AS중 = 4,
        폐기예정 = 5,
        폐기완료 = 6
    }
}

和Controller.cs

public ActionResult Index()
{
   ......
using (DataSet dsResult = callWcfService.fnGetQuery(sXmlParam))
{
  return View(dsResult.Tables[0]);
} 
 }

我想在视图上做这样的事

@Html.EnumDropDownListFor(model => model.item_type, new { @class = "form-control" })

所以我需要引用modelView

@foreach (DataColumn col in Model.Columns)

模型上的鼠标悬停

vs显示信息 [动态WebvViewPage.Model {get;} 获取连接到ViewDataDictionary对象的Model属性]

但添加后     @model myprojectname.Models.ItemViewModel

它会更改[ItemViewModel在行,列上没有定义]

1 个答案:

答案 0 :(得分:0)

如果您想同时使用DataTable和ViewModel,则可以创建一个新的ViewModel,其中包含DataTable和使用的ViewModel的属性。为了使您的代码更整洁,我不建议您这样做。对于常见的情况,一个ViewModel足以提供一个View,您不必将模型组成一个新模型。因此,如果所有数据仅用于显示目的,也许您可​​以考虑向模型添加更多属性,然后将DataTable的所有数据分配给这些属性。