0

データベース内のすべてのワインの完全なカウントをビューモデルに追加するために、いくつかのコードを変更しました。更新されたすべてのファイルをサーバーにコピーすると、次のエラーが発生し続けます。

「vf2.ViewModels.MyAccountViewModel」には「DBWineCount」の定義が含まれておらず、「vf2.ViewModels.MyAccountViewModel」タイプの最初の引数を受け入れる拡張メソッド「DBWineCount」が見つかりませんでした(usingディレクティブまたはアセンブリ参照がありませんか? ?)

これは私の開発ボックスで正常に機能し、ファイルは同じです。web.configファイルを編集して強制的にコンパイルしましたが、まだこの問題があります。代わりにViewBagを使用しようとすると、スローおよびエラーは発生しませんが、空白の値が返されます。ここで何が起こっているのでしょうか?以下は私のコードサンプルです:

namespace vf2.ViewModels
{
    public class MyAccountViewModel
    {
        public DistributorUser DistributorUser { get; set; }
        public ProducerUser ProducerUser { get; set; }
        public RestaurantUser RestaurantUser { get; set; }
        public UserObj UserObj { get; set; }

        [Display(Name="Email")]
        public string MembershipEmail { get; set; }

        public string GetFullName()
        {
           return this.UserObj.FirstName + " " + this.UserObj.LastName;
        }

        public string sInstitutionTab { get; set; }
        public string DBWineCount { get; set; }

    }
}

[Authorize]
        public ActionResult MyAccount()
        {
            MyAccountViewModel myAccount = new MyAccountViewModel();
            MembershipUser muCurrent = Membership.GetUser(true);
            muCurrent = Membership.GetUser(true);

            myAccount.UserObj = db.UserObjs.Find(muCurrent.ProviderUserKey);
            myAccount.MembershipEmail = muCurrent.Email;
            int iDocCount = 0;
            int iRevCount = 0;

            if (myAccount.UserObj != null)
            {
                myAccount.DBWineCount = string.Format("{0:n0}",db.Wines.Count());

                switch ((UserTypesEnum)myAccount.UserObj.UserTypeID)
                {
                    case UserTypesEnum.Producer:
                        myAccount.ProducerUser = db.ProducerUsers.Find(muCurrent.ProviderUserKey);
                        myAccount.sInstitutionTab = "My Producer";
                        myAccount.ProducerUser.Producer.Wines.ToList().ForEach(w => iDocCount +=  w.Docs.Count);
                        myAccount.ProducerUser.Producer.Wines.ToList().ForEach(w => iRevCount += w.Reviews.Count);
<I cut the rest out because it is pretty long>


<div class="lightbox" id="gettingStarted" style="text-align:center;">
    <a href="#" class="ui-icon ui-icon-circle-close closer"></a>
    <h3 style="margin-top:0px;">Getting Started</h3>
    <br />
    To get started using the site, search useing the searchbox above or the search
    tab on the left. 
    <br />From there you'll have access to all @Model.DBWineCount wines in our database.  
       <br />


</div>
4

1 に答える 1

1

ページに最初にアクセスしたときにコンパイラが自動的に実行されるASP.NET開発から来ているのではないかと思います。ASP.NET MVCでは、VisualStudioのpublishコマンドを使用して強制的にコンパイルする必要があります。ソリューションを右クリックして[公開...]を選択し、ファイルを公開するフォルダーを選択して、そのフォルダーの内容を運用サーバーにアップロードします。

Entity Frameworkを使用していて、共有ホスト上にある場合は、アプリを実行する権限がなく、EFにデータベースを自動的に作成させることができることに注意してください。その場合、SQLスクリプトを生成し、データベースで手動で実行する必要があります。

web.configを変更すると、アプリケーションが再起動するだけで、コンパイルは実行されないことに注意してください。ASP.NET MVCでは、テスト時にコンパイルするプロジェクトを明示的にビルドする必要があります。

于 2012-07-24T05:24:21.183 に答える