У меня проблема с архитектурой и передачей моделей в моем приложении Asp.NET MVC ... Вот в чем дело.
Я создал строго типизированный макет, потому что у меня есть панель входа внутри макета (как частичнаявид), которой нужна его модель.И теперь у меня есть некоторые представления (страница регистрации и контакты), которые используют этот макет, и я не знаю, как передать им их модели ...
Мой вопрос заключается в том, как решить эту проблему, например, с помощью другой конструкции, но, возможно, без удвоения кода.Создание ViewModel со всеми возможными моделями для страниц, которые использовали этот макет, не выглядит как вариант (даже если есть какой-то способ передать модель дальше в @RenderBody ()).
Мой код
Панель входа (частичное представление)
@model Models.Home.LoginModel
@{
ViewBag.Title = "Login";
}
@using (Ajax.BeginForm(new AjaxOptions() { UpdateTargetId = "login" }))
{
//some form fields here
}
Макет
@model Models.Home.LoginModel
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div id="login">
@Html.Partial("Account/_Login", @Model)
</div>
<div id="main">
@RenderBody()
</div>
</body>
Страница
@model Models.Home.RegisterModel
@{
ViewBag.Title = "Registration";
}
@using (Ajax.BeginForm(new AjaxOptions() { UpdateTargetId = "registerDialog" }))
{
//some form fields here
}
Действие контроллера для входа в систему
[HttpPost]
public ActionResult Index(LoginModel model, string returnUrl)
{
// If we got this far, something failed, redisplay form
if (Request.IsAjaxRequest())
{
return PartialView("Account/_Login", model);
}
else
{
return View(model);
}
}
Действие контроллера для регистра
[HttpPost]
public ActionResult Register(RegisterModel registerModel)
{
return View(registerModel);
}
Я упростилвсе, удалив ненужные строки кода.