0

これは私のコントローラコードです:

    var myquery = mycontext.Websites.Select(x => new {x.pagetype,x.website1,x.creationdate,x.expirationdate,x.domainregistrar,x.area,x.pin
                    ,x.city, age = DateTime.Now.Subtract(x.expirationdate ?? DateTime.Today)
                });

return View(myquery);

これは私のビューコードです:

@foreach (var item in Model)
    {
        <tr>
            <td>
                <span>@item.pagetype </span>

</td>

</tr>

}

foreachループを通過中に、オブジェクトにページタイプの定義が含まれていないというエラーが発生しましたか?

なぜだろう?

編集:

以下のようにコードを変更してみました。

コントローラ:

   CRMDataContext mycontext = new CRMDataContext();
                var myquery = mycontext.Websites.Select(x => new WebsiteViewModel
                {
                    pagetype = x.pagetype,
                    site = x.site,
                    creationdate = x.creationdate ?? DateTime.Today,
                    expirationdate = x.expirationdate ?? DateTime.Today,
                    domain_registrar = x.domainregistrar,
                    Area = x.area,
                    pin = x.pin,
                    City = x.city,
                   difference = DateTime.Now.Subtract(x.expirationdate ?? DateTime.Today).ToString()
                }).ToList();

     return View(myquery);

しかし、私は例外を取得しています:

操作により、実行時の操作が不安定になる可能性があります。アプリケーションが競合する 2 つのバージョンのクラス ライブラリをロードしていないことを確認してください

私が考えることができるのは、Websiteテーブルのlinq生成クラスであり、Websiteviewモデルが競合しています。しかし、私はなぜ理解できないのですか?

4

2 に答える 2

2

上記の MarcinJuraszek のコメントを詳しく説明するには、これらのプロパティを保持するビュー モデル クラスを作成する必要があります。

ViewModel クラス

public class MyViewModel{
   public string Pagetype {get;set;}
   public string Website1 {get;set;}
   public DateTime Creationdate {get;set;}
   public DateTime Expirationdate {get;set;}
   public string Domainregistrar {get;set;}
   public string Area {get;set;}
   public string Pin {get;set;}
   public string City {get;set;}
   public int Age {get;set;}
}

次に、クエリで ViewModel クラスを選択します

var model = mycontext.Websites.Select(x => new MyViewModel{
                  PageType = x.pagetype
                  WebSite1 = x.website1
                  CreationDate = x.creationdate
                  ExpirationDate = x.expirationdate
                  DomainRegistrar = x.domainregistrar
                  Area = x.area
                  Pin = x.pin
                  City = x.city,
                  Age =DateTime.Now.Subtract(x.expirationdate ?? DateTime.Today)
               }).ToList();

return View(model);

ここで、ビューを強く型付けする必要があります。

@model IEnumerable<MyViewModel>

@foreach (var item in Model)
    {
        <tr>
            <td>
                <span>@item.Pagetype </span>

</td>

</tr>

}
于 2013-03-29T16:28:33.340 に答える
0

丸一日後、私は以下のようにそれを解決することができました:

public WebSiteViewModel
{
     string PageType { get; set;}
     string WebSite { get; set;}
     DateTime CreationDate { get; set;}
     DateTime ExpirationDate { get; set;}
     string DomainRegistrar { get; set;}
     string Area { get; set;}
     string Pin  { get; set;}
     string City { get; set;}
     DateTime Age {get; set;}

     //Constructor
     public WebSiteViewModel(YourWebSiteEntity w)
     {
             PageType = w.pagetype;
             WebSite = w.website1;
             CreationDate = w.creationdate;
             ExpirationDate = x.expirationdate;
             DomainRegistrar = x.domainregistrar;
             Area = x.area;
             Pin = x.pin;
             City = x.city;
             Age = DateTime.Now.Subtract(x.expirationdate ?? DateTime.Today);
     }
}

コントローラ:

public ActionResult Index()
        {
            CRMDataContext mycontext = new CRMDataContext();


            var myquery = mycontext.Websites.Select(x => new WebsiteViewModel(x.pagetype,
               x.site, x.creationdate ?? DateTime.Today, x.expirationdate ?? DateTime.Today, x.domainregistrar, x.pin, x.area, x.city, "Abc")).ToList();

            return View(myquery);
        }

意見:

@model IEnumerable<ImportFromExcel.Model.WebsiteViewModel>
@{
    ViewBag.Title = "Index";
}
<h2>
    Index</h2>
<table>
    <tr>
        <th>
            Page type
        </th>
        <th>
            Website
        </th>
        <th>
            Creation date
        </th>
        <th>
            Expiration Date
        </th>
        <th>
        difference
        </th>
        <th>
            Domain Registrar
        </th>
        <th>
            Pin
        </th>
        <th>
            Area
        </th>
        <th>
            City
        </th>
    </tr>
    @foreach (var item in Model)
    {
        <tr>
            <td>
                <span>@item.pagetype </span>
            </td>
            <td>
                <span>@item.site </span>
            </td>
..so on
        </tr>

    }
</table>

他の誰かがそれが役に立つことを願っています。問題は、モデルオブジェクトを初期化するために WebsiteViewModel Constructor を使用していなかったことです。これは私の問題を最後に解決しました。:)

于 2013-03-30T11:04:44.567 に答える