Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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
Asp.net mvc 3 有什么方法可以清除这个控制器代码吗?_Asp.net Mvc 3_Model_Controller - Fatal编程技术网

Asp.net mvc 3 有什么方法可以清除这个控制器代码吗?

Asp.net mvc 3 有什么方法可以清除这个控制器代码吗?,asp.net-mvc-3,model,controller,Asp.net Mvc 3,Model,Controller,我在MVC3上在线看到的大多数代码在控制器中只有很少的代码,但我似乎不知道如何使这些代码更加精简 也许如果你看一下,你可以提出改进建议。如果您需要查看我的UserModel类,请告诉我 这是帐户控制器的代码 namespace WebUI.Controllers { public class AccountController : Controller { public ActionResult Register() { U

我在MVC3上在线看到的大多数代码在控制器中只有很少的代码,但我似乎不知道如何使这些代码更加精简

也许如果你看一下,你可以提出改进建议。如果您需要查看我的UserModel类,请告诉我

这是帐户控制器的代码

namespace WebUI.Controllers
{
    public class AccountController : Controller
    {
        public ActionResult Register()
        {
            UserModel model = new UserModel();         

            EFCityRepository cityRepo = new EFCityRepository();
            model.Cities = new List<SelectListItem>();
            foreach (var city in cityRepo.FindAllCities()) {
                model.Cities.Add(new SelectListItem { Text = city.Name, Value = city.CityId.ToString(), Selected = true });
            }

            EFGenderRepository genderRepo = new EFGenderRepository();
            model.Genders = new List<SelectListItem>();
            foreach (var gender in genderRepo.FindAllGenders()) {
                model.Genders.Add(new SelectListItem { Text = gender.Name, Value = gender.GenderId.ToString(), Selected = true });
            }

            return View(model);
        }

        [HttpPost]
        public ActionResult Register(UserModel model) 
        {
            EFCityRepository cityRepo = new EFCityRepository();
            model.Cities = new List<SelectListItem>();
            foreach (var city in cityRepo.FindAllCities())
            {
                model.Cities.Add(new SelectListItem { Text = city.Name, Value = city.CityId.ToString(), Selected = true });
            }

            EFGenderRepository genderRepo = new EFGenderRepository();
            model.Genders = new List<SelectListItem>();
            foreach (var gender in genderRepo.FindAllGenders())
            {
                model.Genders.Add(new SelectListItem { Text = gender.Name, Value = gender.GenderId.ToString(), Selected = true });
            }

            if (ModelState.IsValid)
            {
                Domain.User user = new Domain.User();
                user.UserRoleId = 1;
                user.Nickname = model.Nickname;
                user.Name = model.Name;
                user.Lastname = model.Lastname;
                user.GenderId = model.GenderId;
                user.Address = model.Address;
                user.Email = model.Email;
                user.Telephone = model.Telephone;
                user.MobilePhone = model.MobilePhone;
                user.Carnet = model.Carnet;
                user.DateOfBirth = model.DateOfBirth;
                user.DateOfRegistry = DateTime.Now;
                user.LastDateLogin = DateTime.Now;
                user.IsActive = false;
                user.LanceCreditBalance = 5;
                user.LancesSpent = 0;
                user.Login = model.Login;
                user.Password = model.Password;
                user.EmailVerificationCode = "TempTokenString";
                user.CityId = model.CityId;

                EFUserRepository repo = new EFUserRepository();
                var result = repo.CreateUser(user);

                if (result == UserCreationResults.Ok)
                {
                    FormsAuthentication.SetAuthCookie(model.Nickname, false /* createPersistentCookie */);
                    return RedirectToAction("Index", "Home");
                }
                else
                {
                    switch (result)
                    {
                        case UserCreationResults.UsernameExists:
                            ModelState.AddModelError("", "El nombre de usuario ya esta siendo utilizado.");
                            break;
                        case UserCreationResults.EmailAlreadyExists:
                            ModelState.AddModelError("", "Ese correo ya esta en uso.");
                            break;
                        case UserCreationResults.NicknameAlreadyExists:
                            ModelState.AddModelError("", "El nickname ya esta siendo utilizado.");
                            break;
                        case UserCreationResults.UnknownError:
                            ModelState.AddModelError("", "Algo durante el registro. Por favor intente de nuevo.");
                            break;
                        default:
                            break;
                    }
                }

            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }
    }
}
名称空间WebUI.Controllers
{
公共类AccountController:控制器
{
公众行动结果登记册()
{
UserModel model=新的UserModel();
EFCityRepository cityRepo=新的EFCityRepository();
model.Cities=新列表();
foreach(城市报告中的var city.FindAllCities()){
model.Cities.Add(新SelectListItem{Text=city.Name,Value=city.CityId.ToString(),Selected=true});
}
EFGenderRepository genderRepo=新EFGenderRepository();
model.Genders=新列表();
foreach(genderRepo.FindAllGenders()中的变量gender){
model.Genders.Add(新SelectListItem{Text=gender.Name,Value=gender.GenderId.ToString(),Selected=true});
}
返回视图(模型);
}
[HttpPost]
公共操作结果寄存器(用户模型)
{
EFCityRepository cityRepo=新的EFCityRepository();
model.Cities=新列表();
foreach(城市报告中的var city.FindAllCities())
{
model.Cities.Add(新SelectListItem{Text=city.Name,Value=city.CityId.ToString(),Selected=true});
}
EFGenderRepository genderRepo=新EFGenderRepository();
model.Genders=新列表();
foreach(genderRepo.FindAllGenders()中的变量gender)
{
model.Genders.Add(新SelectListItem{Text=gender.Name,Value=gender.GenderId.ToString(),Selected=true});
}
if(ModelState.IsValid)
{
Domain.User User=new Domain.User();
user.UserRoleId=1;
user.Nickname=model.Nickname;
user.Name=model.Name;
user.Lastname=model.Lastname;
user.GenderId=model.GenderId;
user.Address=model.Address;
user.Email=model.Email;
user.Telephone=model.Telephone;
user.MobilePhone=model.MobilePhone;
user.Carnet=model.Carnet;
user.DateOfBirth=model.DateOfBirth;
user.DateOfRegistry=DateTime.Now;
user.LastDateLogin=DateTime.Now;
user.IsActive=false;
user.creditbalance=5;
user.lanesspent=0;
user.Login=model.Login;
user.Password=model.Password;
user.EmailVerificationCode=“试探安装”;
user.CityId=model.CityId;
EFUserRepository repo=新EFUserRepository();
var result=repo.CreateUser(用户);
if(result==UserCreationResults.Ok)
{
FormsAuthentication.SetAuthCookie(model.昵称,false/*createPersistentCookie*/);
返回重定向到操作(“索引”、“主页”);
}
其他的
{
开关(结果)
{
案例UserCreationResults.UserName存在:
AddModelError(“,“El nombre de usuario ya esta siendo utilizado.”);
打破
案例UserCreationResults.EmailAlreadyExists:
AddModelError(“,“Ese correo ya esta en uso.”);
打破
案例UserCreationResults.昵称ReadyExists:
AddModelError(“,”El昵称为ya esta siendo utilizado.);
打破
案例UserCreationResults.Unknown错误:
ModelState.addmodeleror(“,”Algo durante el registro.Por favor intent de nuevo.”);
打破
违约:
打破
}
}
}
//如果我们走到这一步,有些东西失败了,重新显示形式
返回视图(模型);
}
}
}

我使用实体框架作为我的ORM,它会自动为我生成一个用户类。但是,我创建了一个User*Model*类,以便为视图添加数据注释。也许这是个错误的想法?

我有很多建议。对于startes,请阅读依赖性注入和控制反转(DI和IoC)。他们将使所有样板对象实例化成为过去

接下来,将每个列表生成器的列表转换为Linq表达式。更简洁,也更可能更快

然后,在post处理程序中,再次执行相同的操作。此外,了解AutoMapper,它会自动将您的视图映射到域类,使您的生活更加轻松

如果你做了这些事情,你的代码将减少2倍,甚至3倍

编辑:

一个linq查询示例,因为我真的不知道对象的定义。。。看起来像这样:

model.Cities = cityRepo.FindAllCities().Select(city => new SelectListItem() { 
         Text = city.Name, Value = city.CityId.ToString()}).ToList();
请注意,您不必重新创建一个新列表,因为它是由ToList()方法返回的。它还使用投影将项目选择到新的SelectListItem中

基本上,您可以这样编写方法,使用依赖注入、Linq和AutoMapper(它看起来更长,因为我必须多次换行以适应如此小的视图):

名称空间WebUI.Controllers
{
公共类AccountController:控制器
{
私家侦探
namespace WebUI.Controllers
{
    public class AccountController : Controller
    {
        private IGenderRepository _genderRepo;
        private ICityrRepository _cityRepo;
        private IUserRepository _userRepo;

        public AccountController(IGenderRepository gr, ICityRepository cr, 
               IUserRepository ur)
        {
            _genderRepo = gr;
            _cityRepo = cr;
            _userRepo = ur;
        }

        public ActionResult Register()
        {
            UserModel model = new UserModel();         

            // Selected property is ignored by MVC on SelectListItems
            model.Cities = _cityRepo.FindAllCities().Select(city => 
                    new SelectListItem() { Text = city.Name, 
                         Value = city.CityId.ToString()}).ToList();

            model.Genders = _genderRepo.FindAllGenders().Select(gender => 
                    new SelectListItem() { Text = gender.Name, 
                         Value = gender.GenderId.ToString()}).ToList();

            return View(model);
        }

        [HttpPost]
        public ActionResult Register(UserModel model) 
        {
            model.Cities = _cityRepo.FindAllCities().Select(city => 
                    new SelectListItem() { Text = city.Name, 
                         Value = city.CityId.ToString()}).ToList();

            model.Genders = _genderRepo.FindAllGenders().Select(gender => 
                    new SelectListItem() { Text = gender.Name, 
                         Value = gender.GenderId.ToString()}).ToList();

            if (ModelState.IsValid)
            {
                Domain.User user = Mapper.Map<Domain.User, Model>(model)

                var result = _userRepo.CreateUser(user);
                if (result == UserCreationResults.Ok) {
                    FormsAuthentication.SetAuthCookie(model.Nickname, false);
                    return RedirectToAction("Index", "Home");
                } else {
                    ModelState.AddModelError("", GetErrorString(result));
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }
    }
}