經過這麼多年使用ASP.Net,我仍然試圖找出如何使用MVC實現相同的結果。MVC - 多個強類型的對象...在一個視圖
我有一個控件強類型的東西的materpage。當我導航到不同的強類型模型的視圖...並單擊按鈕執行某些操作時,我得到「傳入字典的模型項目類型爲Site.Models.RegisterModel」,但此字典需要模型「Site.Models.LogOnModel」類型的項目。
爲了這個例子,我們可以使用VS 2010提供的Default MVC應用程序,讓我們想象一下我想更改「LogonUserControl.ascx」,以便它告訴我登錄的用戶(因爲它工作目前)或允許我從那裏登錄,向我顯示用戶名和密碼的文本框(因此在這種情況下從主頁)。
所以我採取了控制和強烈鍵入如下:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Gioby.Models.LogOnModel>" %>
<%
if (Request.IsAuthenticated) {
%>
Welcome <b><%: Page.User.Identity.Name %></b>
[ <%: Html.ActionLink("Log Off", "LogOff", "Account")%> ]
<%
}
else {
%>
<% using (Html.BeginForm()) { %>
<div id="logon">
<div class="editor-label">
<%: Html.LabelFor(m => m.UserName)%>
<%: Html.TextBoxFor(m => m.UserName)%>
<%: Html.ValidationMessageFor(m => m.UserName, "*") %>
<%: Html.LabelFor(m => m.Password)%>
<%: Html.PasswordFor(m => m.Password)%>
<%: Html.ValidationMessageFor(m => m.Password, "*") %>
<input type="submit" value="Log On" />
</div>
<div class="editor-label">
<%: Html.ActionLink("Register here", "Register", "Account")%>
<%: Html.CheckBoxFor(m => m.RememberMe, new { @class = "pad-left" })%>
<%: Html.LabelFor(m => m.RememberMe) %>
</div>
</div>
<% } %>
<%
}
%>
然後在HomeController中,我添加了一個程序爲:
[HttpPost]
public ActionResult Index(LogOnModel model, string returnUrl)
{
if (ModelState.IsValid)
{
// ==>> Check Login against your DB
// Now check if param returnUrl is empty
if (!String.IsNullOrEmpty(returnUrl))
return Redirect(returnUrl);
return RedirectToAction("Index", "Home");
}
// If we got this far, something failed, redisplay form
return View(model);
}
我在主頁上測試它...它的工作原理!
但是,當我瀏覽到「註冊」視圖(請記住,「LogonUserControl.ascx」位於裏面的「母版」,因此從註冊視圖中可見)。
所以,當我點擊註冊按鈕,我得到的錯誤: 傳遞到字典的模型產品類型Site.Models.RegisterModel的」,但這部詞典需要類型Site.Models.LogOnModel的模型項目」。
問: 是否意味着我將永遠無法在不同拼湊成一個看法?
比方說,我想寫一個電子商務網站,並在主頁上我想看到「最常用的標籤」,「大多數購買的產品」,「本月產品」,「類別列表」......所有相同的視圖,每個人都有自己的HTTP POST操作。
如果這可以使用MVC?
您的'Register'控制器操作在哪裏?你從上面的例子中忽略了它嗎? – 2010-10-25 19:37:05