.net 对于无用户数据和某些用户数据,我是否应该有不同的模型和视图?
我刚刚开始学习asp.NETMVC,我不确定该做什么 我有一个用户,一个用户有一组(0或更多)提醒。我有一个控制器,用于从提醒服务获取当前登录用户的提醒。它填充一个模型,该模型保存有关用户和提醒集合的一些信息 我的问题是,我应该有两种不同的观点,一种是关于没有提醒的时候,另一种是关于有提醒的时候?或者我应该有一个视图来检查提醒的数量并显示不同的内容?拥有一个视图似乎是错误的,因为我在视图中看到的代码是.net 对于无用户数据和某些用户数据,我是否应该有不同的模型和视图?,.net,asp.net-mvc-2,.net,Asp.net Mvc 2,我刚刚开始学习asp.NETMVC,我不确定该做什么 我有一个用户,一个用户有一组(0或更多)提醒。我有一个控制器,用于从提醒服务获取当前登录用户的提醒。它填充一个模型,该模型保存有关用户和提醒集合的一些信息 我的问题是,我应该有两种不同的观点,一种是关于没有提醒的时候,另一种是关于有提醒的时候?或者我应该有一个视图来检查提醒的数量并显示不同的内容?拥有一个视图似乎是错误的,因为我在视图中看到的代码是if(Model.remementers.Count==0){//do something}el
if(Model.remementers.Count==0){//do something}else{do something}
,而在视图中拥有逻辑感觉是错误的。但是如果我想有两个不同的视图,那么我想在我的控制器中有一些这样的代码:
[Authorize]
public ActionResult Index()
{
MembershipUser currentUser = m_membershipService.GetUser();
IList<Reminder> reminders = m_reminderRepository.GetReminders(currentUser);
if (reminders.Count == 0)
{
var model = new EmptyReminderModel
{
Email = currentUser.Email,
UserName = currentUser.UserName
};
return View(model);
}
else
{
var model = new ReminderModel
{
Email = currentUser.Email,
UserName = currentUser.UserName,
Reminders = reminders
};
return View(model);
}
[授权]
公共行动结果索引()
{
MembershipUser currentUser=m_membershipService.GetUser();
IList提醒=m_employerrepository.getemployers(当前用户);
如果(提醒次数==0)
{
var模型=新的EmptyreminedModel
{
Email=currentUser.Email,
UserName=currentUser.UserName
};
返回视图(模型);
}
其他的
{
var模型=新的提醒模型
{
Email=currentUser.Email,
UserName=currentUser.UserName,
提醒=提醒
};
返回视图(模型);
}
但很明显,这不会编译,因为视图不能同时采用两种不同的类型。因此,如果要执行此操作,我应该根据提醒的空性从控制器返回特定的命名视图,还是应该将Index()方法重定向到其他类似的操作:
[Authorize]
public ActionResult Index()
{
MembershipUser currentUser = m_membershipService.GetUser();
IList<Reminder> reminders = m_reminderRepository.GetReminders(currentUser);
if (reminders.Count == 0)
{
return RedirectToAction("ShowEmptyReminders");
}
else
{
return RedirectToAction("ShowReminders");
}
}
[授权]
公共行动结果索引()
{
MembershipUser currentUser=m_membershipService.GetUser();
IList提醒=m_employerrepository.getemployers(当前用户);
如果(提醒次数==0)
{
返回重定向到操作(“ShowEmptyReminders”);
}
其他的
{
返回重定向到操作(“显示提醒”);
}
}
这似乎更好,但我需要在ShowMemorients操作中重新查询当前用户的提醒
或者我应该完全做其他的事情吗?对于这样的小复杂性,我觉得在视图中只使用“”块没有问题。但是,如果您真的想走远一点 一个可能的答案是使用DisplayTemplates。如果您有一个基本UserBaseViewModel,然后您的UserWithRemembersViewModel和UserWithWithRemembersViewModel继承自UserBaseViewModel,那么您可以将UserBaseViewModel作为视图的通用类型传递,即System.Web.Mvc.ViewPage 然后,根据控制器中的逻辑,将UserWithRemembersViewModel或另一个传递回视图。(aka.return视图(new userWithOutRemembersViewModel());//继承UserBaseViewModel,因此一切正常!) 然后,您只需在视图上调用Html.DisplayFor(m=>m)
如果在\Views\\DisplayTemplates\中创建两个模板,UserWithRemembersViewModel.ascx和UserWithOutRemembersViewModel.ascx。MVC将为您传递的模型类型选择正确的显示模板,并且由于每个部分视图都将强类型化为正确的视图模型类型,因此无需显示正确的HTML。我听说你说的是次要的复杂性,但由于我的目标是学习,我想要一些相当简单的东西,但希望“以正确的方式做事”,因此你的建议听起来很理想。我将尝试一下,看看它能给我带来什么。从未使用过HTML.display,因此可以使用其他东西。谢谢。