2015-11-19 16 views
0

我在我的導航partial中有一個model,而我的註冊視圖中有一個模型時出現問題(當然是@RenderBody()如何解決兩個模型之間的衝突,其中一個模板和ASP.NET MVC中的視圖中的其他模型

這是我得到

The model item passed into the dictionary is of type 'ProfessionalDev.Models.Registration', but this dictionary requires a model item of type 'ProfessionalDev.Models.Login'. 
Line 14: <body> 
Line 15: 
Line 16:  @Html.Partial("_Navigation") <=== THE ERROR IS HERE 
Line 17:  <div class="top-bg"></div> 
Line 18:  <div class="container body-content"> 

我的佈局,如果如下

@Html.Partial("_Navigation") 
<div class="top-bg"></div> 
<div class="container body-content"> 
    @Html.Partial("_Header") 
    <main> 
     @RenderBody() 
    </main> 
    <footer> 
     <p>Copyright &copy; [email protected] Company</p> 
    </footer> 
</div> 

_Navigation部分地方錯誤我因爲登錄表單的Login模型

@model ProfessionalDev.Models.Login 

<div class="navbar navbar-inverse navbar-fixed-top"> 
    <div class="container"> 
     <div class="navbar-header"> 
      ... 

        <ul class="dropdown-menu"> 
         <li> 
          @Html.Partial("_Messages") 

          @using (Html.BeginForm("Index", "Home", FormMethod.Post)) { 
           @Html.ValidationMessageFor(model => model.Email) 
           @Html.TextBoxFor(model => model.Email, new { @class = "form-control", @placeholder = "Email" }) 

           @Html.ValidationMessageFor(model => model.Passwd) 
           @Html.PasswordFor(model => model.Passwd, new { @class = "form-control", @placeholder = "Password" }) 

           <input type="submit" value="Submit" name="action:Login" class="btn btn-primary btn-sm" /> 
          } 
         </li> 
         <li role="separator" class="divider"></li> 
         <li><a href="#">Forgot Password?</a></li> 
        </ul> 
      ... 

然後我有一個Registration模型註冊視圖

@model ProfessionalDev.Models.Registration 

@{ 
    ProfessionalDev.Library.IdentifierTypeItems identifierTypes = new ProfessionalDev.Library.IdentifierTypeItems(); 
} 
<h1>New User Account</h1> 
<hr /> 

@using (Html.BeginForm("Index", "Registration", FormMethod.Post)) { 
    <div class="row"> 
     <div class="col-md-6"> 
      <div class="form-group"> 
       @Html.LabelFor(model => model.FirstName, "First Name", new { @class = "control-label" }) <span class="required">* </span> 
       @Html.ValidationMessageFor(model => model.FirstName) 
       @Html.TextBoxFor(model => model.FirstName, new { @class = "form-control" }) 
      </div> 
      ... 
    <input type="submit" value="Register" name="action:Register" class="btn btn-primary" /> 
} 

這個RegistrationController

public class RegistrationController : Controller 
{ 
    // GET: Registration 
    public ActionResult Index() 
    { 
     return View(); 
    } 

    [HttpPost] 
    [MultipleButton(Name = "action", Argument = "Register")] 
    public ActionResult Index(Registration reg) { 

     if (ModelState.IsValid) { 
      ... 
      return RedirectToAction("Index", "Home"); 
     } 

     return View("Index", reg); 
    } 
} 

當我點擊註冊按鈕, Registration對象無效,因爲您可以看到上面應該將reg返回到Registration/Index觀點,而是被認爲從_Navigation部分

的HomeController

public class HomeController : Controller 
{ 
    [HttpPost] 
    [MultipleButton(Name = "action", Argument = "Login")] 
    public ActionResult Index(Login login) 
    { 
     ... 
     return View("Index", login); 
    } 

返回Home/Index視圖(我希望我做的意義...)

我該如何解決這個問題?

這是它從GUI看起來的樣子。在頂部菜單中的登錄和註冊頁面

enter image description here

+1

錯誤是不言自明的。如果你沒有指定模型,那麼你沒有將'Login'的實例傳遞給部分使用'@ Html.Partial(「_ Navigation」,new Login())' - 它將使用模型形式的主視圖。 –

+0

我遵循你的方法,而是我創建了一個變量登錄'ProfessionalDev.Models.Login登錄=新ProfessionalDev.Models.Login(); '然後將它傳遞給導航部分'@ Html.Partial(「_ Navigation」,login)'。這是工程,除了當我提交註冊表單,登錄對象也返回錯誤https://goo.gl/khA67u我理解這個概念,爲什麼發生這種情況,我只需要找出一種方法來處理這個 – esausilva

回答

0

您重定向,因爲你使用@using (Html.BeginForm("Index", "Home", FormMethod.Post))您的主視圖中,並不要緊,你有什麼局部視圖裏面。 此外,唯一可以在主視圖中調用partial view方法的方法是jQuery。

最好的方法是使用ProfessionalDev.Models.Registration中的ProfessionalDev.Models.Login類型屬性。

然後用你的Html.BeginForm登錄註冊視圖。

相關問題