Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 对于无用户数据和某些用户数据,我是否应该有不同的模型和视图?_.net_Asp.net Mvc 2 - Fatal编程技术网

.net 对于无用户数据和某些用户数据,我是否应该有不同的模型和视图?

.net 对于无用户数据和某些用户数据,我是否应该有不同的模型和视图?,.net,asp.net-mvc-2,.net,Asp.net Mvc 2,我刚刚开始学习asp.NETMVC,我不确定该做什么 我有一个用户,一个用户有一组(0或更多)提醒。我有一个控制器,用于从提醒服务获取当前登录用户的提醒。它填充一个模型,该模型保存有关用户和提醒集合的一些信息 我的问题是,我应该有两种不同的观点,一种是关于没有提醒的时候,另一种是关于有提醒的时候?或者我应该有一个视图来检查提醒的数量并显示不同的内容?拥有一个视图似乎是错误的,因为我在视图中看到的代码是if(Model.remementers.Count==0){//do something}el

我刚刚开始学习asp.NETMVC,我不确定该做什么

我有一个用户,一个用户有一组(0或更多)提醒。我有一个控制器,用于从提醒服务获取当前登录用户的提醒。它填充一个模型,该模型保存有关用户和提醒集合的一些信息

我的问题是,我应该有两种不同的观点,一种是关于没有提醒的时候,另一种是关于有提醒的时候?或者我应该有一个视图来检查提醒的数量并显示不同的内容?拥有一个视图似乎是错误的,因为我在视图中看到的代码是
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,因此可以使用其他东西。谢谢。