2012-04-03 14 views
10

İlk ASP.net MVC projemde çalışıyorum ve aynı sayfada birden çok form kullanarak bazı problemlerim var. İlk ben 2 kısmi Class oluşturduk: (* Kayıt * kullanıcının giriş yapmasına izin oturum, kullanıcı kayıt sağlayacaktır.) Aynı sayfadaki Çoklu Formlar ASP.net MVC

Sonra benim "Logpage" onları entegre etmek HTML.render kullandı. Yani 2 farklı Eylem kullanmalıyım. kimse bu gibi:

 [HttpPost] 
    public ActionResult Login(LogModel.Login Model) 
    { 
     if (ModelState.IsValid) 
     { 

      if (LogModel.Login.Verifuser(Model.IDUser, Model.Password)) 
      { 
       FormsAuthentication.SetAuthCookie(Model.IDUser, false); 
       if (LogModel.Login.IsAdmin(Model.IDUser, Model.Password)) 
       { 
        return View("Admin/Index"); 
       } 
       else 
       { 
        return View("Agence/Index"); 
       } 
      } 
      else 
      { 
       ModelState.AddModelError("", "Invalide username or Password"); 
       return View(Model); 
      } 
     } 
     return View(Model); 
    } 

hata durumunda i yeni Sayfa yönlendirme ediyorum sorunu (Beyaz sayfa doğrulama özetini içerir). Bu yüzden, bu hata mesajını varsayılan sayfamın Giriş Sayfamda nasıl göstereceğime merak ediyorum.

+2

Kodunuzu yazın. Nasıl okunabilir hale getirileceğine dair talimatlar için biçimlendirme kılavuzlarını izleyin. –

+0

bana açıklayabilir misin ?? – Chlebta

+0

Tam olarak sorun nedir? POST eylemi formuyla ilgili endişeleriniz varsa, her iki formun da POST'ları farklı denetleyici işlemlerine sahip olabilirsiniz. – Tuan

cevap

24

Bunu üç eylemle ve karmaşık bir modelle çözebilirsiniz. Kodunuzda

public class LoginOrRegisterViewModel 
{ 
     public Models.RegisterViewModel Register { get; set; } 
     public Models.LoginViewModel Login { get; set; } 
} 


[HttpGet] 
public ActionResult Login() 
{ 
     return View("Login", new LoginOrRegisterViewModel()); 
} 

[HttpPost] 
public ActionResult Register(Models.LoginViewModel model) 
{ 
     if(!ModelState.IsValid) 
      return View("Login", new LoginOrRegisterViewModel(){ Register = model }); 
     else 
     { 
      //TODO: Validate the user 
      //TODO: Write a FormsAuth ticket 
      //TODO: Redirect to somewhere 
    } 
} 

[HttpPost] 
public ActionResult Login(Models.RegistrationViewModel model) 
{ 
     if(!ModelState.IsValid) 
      return View("Login", new LoginOrRegisterViewModel(){ Login = model}); 
     else 
     { 
      //TODO: CRUD for registering user 
      //TODO: Write forms auth ticket 
      //TODO: Redirect 
    } 
} 

, sen Form eylemi ayarlamak emin olun:! Ayrıca doğru dönmek zorunda, Verifyuser dalında IsAdmin çağırmak gerekiyor gibi

@model Models.LoginOrRegisterViewModel 

@using(Html.BeginForm("Login", "Controller", FormMethod.Post, new { id = "loginForm"})) 
{ 
     @Html.EditorFor(m => Model.Login) 
} 

@using(Html.BeginForm("Register", "Controller", FormMethod.Post, new { id = "registerForm"})) 
{ 
     @Html.EditorFor(m => Model.Register) 
} 
+2

FYI, ikinci POST yönteminiz Kayıt olarak adlandırılmalıdır. – Tuan

+0

Bu bölüm "" "genel sınıf LoginOrRegisterViewModel { public Models.RegisterViewModel Register {get; set;} public Models.LoginViewModel Giriş {get; set;}" "" My Model Class'a koydum ??? } – Chlebta

+0

Ayrıca "" LoginOrRegister "nedir – Chlebta

0

görünüyor görünümü: "Giriş" denilen eylem için varsayılan görünümü, döndüren bir ModelState hatası, olduğunda

 if (ModelState.IsValid) 
     { 

      if (LogModel.Login.Verifuser(Model.IDUser, Model.Password)) 
      { 
       FormsAuthentication.SetAuthCookie(Model.IDUser, false); 
       if (LogModel.Login.IsAdmin(Model.IDUser, Model.Password)) 
       { 
        return View("Admin/Index"); 
       } 
       else 
       { 
        return View("Agence/Index"); 
       } 
      } 
      else 
      { 
       ModelState.AddModelError("", "Invalide username or Password"); 

       if (LogModel.Login.IsAdmin(Model.IDUser, Model.Password)) 
        return View("Admin/Index", Model); 
       else 
        return View("Agence/Index", Model); 

      } 
     } 

Şu anda return View(Model); diyoruz.

+0

Bu işe yaramamış Beetwen Model – Chlebta

+0

Oldu O zaman, Modele Index görünümleri tarafından beklenen tipte basmanız ya da bunu oluşturmak için Model'e ("Yönetici/Dizin") ve Görünüm'e ("Agence"/Index "). – Tuan

+0

Başlatayım ASP.net MVC bana daha fazlasını anlatabilir mi ?? Ben noktayı almadım: ' – Chlebta