Это сводит меня с ума. Я не включаю какой-либо код, потому что хочу знать лучший подход к этому концептуально, не влияя на ответ.Asp.Net MVC MasterPage UserControl UpdateModel
В Asp.Net MVC 2 (бета-версия 2010 года) У меня есть сайт MasterPage. Мастер с UserControl «SignIn». Этот пользовательский элемент управления имеет 3 поля, из которых я хочу получить данные. Значение TextBox «Электронная почта», значение TextBox «Пароль» и значение контрольной суммы bool «RememberMe». Теперь я пробовал несколько вещей, но все они относятся к действию, передаваемому HomePageController, у которого есть свой тип модели, который не совпадает с типом модели UserControl. UserControl Model = Пользовательский класс, HomePageController Model = специализированная модель HomePageData, в которой есть вещи, которые мне нужны для заполнения моего HomePage View Content.
Я могу подключиться к действию HomePageController «SignIn» как с помощью ActionLink, так и с помощью специального сообщения с параметрами (строка Email, строка Password, bool? RememberMe), но никакие значения моих элементов управления HtmlHelper, находящиеся на UserControl SignIn.ascx, никогда не получат как бы ни старался.
Элемент управления SignIn по-настоящему должен находиться на Site.Master, но я не уверен, что я поступаю правильно, используя HomePageController и настройку «AccountController», но этот вопрос является спорным, если я не могу каким-то образом введите значения, введенные пользователем, в 3 поля ввода UserControl.
Примечание: я попробовал UpdateModel (который не генерирует исключение, но все поля пользовательского объекта равны null, TryUpdateModel с аналогичными результатами, TryUpdateModel возвращает true, но все свойства null в экземпляре пользователя, [AcceptVerbs [ «Post»]] в методе HomePageController «SignIn» с параметрами и без них, снова нет значений, которые были получены или могут быть получены из UserControl правильно. Ad nauseam.)
Я просмотрел интернет и не могу найти пример выполнения именно то, что я пытаюсь сделать с сценарием MasterPage-> UserControl-> XyzController (опять же, я не настаиваю на использовании HomePageController для этого, поэтому правильный способ сделать это может использовать «невидимый» контроллер.
Кто-нибудь дарит мне счастливое Рождество (если кто-то работает lol)
Заранее спасибо ... о, и если вы знаете только Vb.Net, это тоже хорошо, я конвертирую ваш ответ на C#.
OK - Я пробовал следующие предложения безрезультатно. Я создал простой пример (без предложения используется в качестве основы, чтобы начать с)
мой MasterPage (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 Home View (только в случае, если кто нуждается в этом ...)
<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="indexContent" ContentPlaceHolderID="MainContent" runat="server">
</asp:Content>
OK - Это работает с предостережением, что я использую кнопку отправки ... Теперь ... почему ActionLink не работает? Кроме того, мне нужно иметь кнопку «Присоединиться» на странице, используя те же поля, и мне нужно указать, было ли нажато Join-or- SignIn, было ли это в двух разных действиях внутри контроллера или параметре внутри одного и того же действия ... Присоединение фактически не просто перенаправляется на другую страницу, мне нужно получить введенные значения и сделать что-то конкретное с введенными данными, чтобы пользователь мог «присоединиться» к члену ... –
Для разных вы используете одно и то же имя для кнопок, но другое значение .. в вашем действии вы добавляете это имя к параметрам Action (string buttonname) и проверяете значение имени кнопки, чтобы выяснить, какая кнопка была нажата .. для ссылок на работу как кнопки отправки, Мне нужно будет использовать javascript. Это еще одна история. –
Я предполагаю, что у вас есть фон webforms. О тех ActionLinks, которые не передают входные значения. MVC похож на чистый HTML, нет ViewState. На самом деле никакого состояния вообще нет. В webForms полная страница контуров сворачивается в форма, с которой возвращается каждый действие. в MVC, чтобы опубликовать что-то, что вам нужно, или javascript. –