我刚刚更改了一些代码,将我数据库中所有葡萄酒的完整计数添加到视图模型中。当我将所有更新的文件复制到我的服务器时,我不断收到以下错误:
'vf2.ViewModels.MyAccountViewModel'不包含的定义 'DBWineCount'并没有扩展方法'DBWineCount'接受第一个 可以找到类型为“vf2.ViewModels.MyAccountViewModel”的参数 (您是否缺少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>
答案 0 :(得分:1)
我怀疑你是来自ASP.NET开发,编译器在首次访问页面时会自动运行。 在ASP.NET MVC中,您需要使用Visual Studio的发布命令强制进行编译。右键单击解决方案并选择“发布...”,然后选择要发布文件的文件夹,然后将该文件夹的内容上载到生产服务器。
请注意,如果您使用的是Entity Framework并且在共享主机上,您可能没有运行该应用程序的权限,并且EF会自动为您创建数据库。在这种情况下,您需要生成SQL脚本并在数据库上手动执行这些脚本。
请注意,修改web.config只会重新启动应用程序,但不会执行任何编译。在ASP.NET MVC中,您需要在测试时显式构建要编译的项目。