Это сводит меня с ума. Я не включаю какой-либо код, потому что хочу знать, как лучше сделать это концептуально, не влияя на ответ.
В Asp.Net MVC 2 (бета-версия 2010), между прочим, у меня есть сайт MasterPage. Мастер с UserControl «SignIn». Этот пользовательский элемент управления имеет 3 поля, из которых я хочу получать данные. Значение TextBox «Email», значение TextBox «Password» и значение bool CheckBox «RememberMe». Теперь я попробовал несколько вещей, но все они относятся к действию, передаваемому в HomePageController, который имеет свой собственный тип Model, который не совпадает с типом Model в UserControl. UserControl Model = класс пользователя, HomePageController Model = специализированная модель HomePageData, в которой есть то, что мне нужно для наполнения моего HomePage View Content.
Я могу подключиться к действию HomePageController «Вход» как через ActionLink, так и через конкретную публикацию с параметрами (строка Email, строка Password, bool? RememberMe), но никакие значения моих элементов управления HtmlHelper, находящихся в UserControl SignIn.ascx, никогда не передаются. в контроллер, похоже, что бы я ни пытался.
Элемент управления SignIn действительно должен находиться на Site.Master, но я не уверен, что правильно делаю, используя HomePageController, а не настраивая «AccountController», но суть спорна, если я не могу каким-то образом получить значения, введенные пользователем в 3 поля ввода UserControl.
К сведению: я пробовал UpdateModel (который не выдает исключение, но все поля пользовательского объекта имеют значение null, TryUpdateModel с похожими результатами, TryUpdateModel возвращает true, но все нулевые свойства в пользовательском экземпляре [AcceptVerbs [" Отправить "]] в методе HomePageController" SignIn "с параметрами и без параметров, опять же, значения не переданы или не могут быть получены из UserControl правильно. Ad nauseam.)
Я искал в интернете и не могу найти пример, который точно выполняет то, что я пытаюсь сделать со сценарием MasterPage-> UserControl-> XyzController (опять же, я не настаиваю на использовании HomePageController для этого, так что правильный способ Для этого может использоваться «безвидимый» контроллер.
Кто-нибудь подарит мне счастливого Рождества (если кто-то работает)
Заранее спасибо ... о, и если вы знаете, что Vb.Net тоже хорошо, я переведу ваш ответ на C #.
ОК - я попробовал приведенные ниже предложения безрезультатно. Я создал простой пример (без предложений для начала)
Моя мастер-страница (Site.Master) выглядит следующим образом ...
<%@ Master Language="C#" Inherits="System.Web.Mvc.ViewMasterPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
</head>
<body>
<% Html.RenderPartial("SignIn"); %>
<asp:ContentPlaceHolder ID="MainContent" runat="server" />
</body>
</html>
и мой вход в систему UserControl выглядит следующим образом
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<StackOverflowExample.Models.WebUser>" %>
Email: <%= Html.TextBox("Email") %>
Password: <%= Html.TextBox("Password") %>
<%= Html.ActionLink("Sign In", "SignIn", "Home") %>
... и моя упрощенная модель выглядит следующим образом ....
namespace StackOverflowExample.Models
{
public class WebUser
{
public string Email { get; set; }
public string Password { get; set; }
}
}
... и мой HomeController выглядит следующим образом ...
namespace StackOverflowExample.Controllers
{
[HandleError]
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult SignIn()
{
var user = new WebUser();
try
{
UpdateModel(user);
}
catch (Exception ex)
{
Debug.WriteLine(ex);
throw;
}
return Redirect("Index");
}
}
}
... из этого простого примера, если я смогу получить данные в экземпляр WebUser внутри HomeController или любой другой контроллер в этом отношении, я могу использовать опубликованный пример, чтобы исправить свой реальный веб-сайт. Я знаю, что мне здесь не хватает чего-то очень фундаментального, и я на 99% уверен, что это связано с тем фактом, что элемент управления SignIn строго типизирован для класса WebUser, а HomeController или HomeView (Index.aspx) не является строго типизированным. к той же (или любой другой) модели.
Вот скудный домашний просмотр Index.aspx (на тот случай, если это кому-нибудь понадобится ...)
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
</asp:Content>