Проблема с несколькими представлениями в одном представлении - PullRequest
0 голосов
/ 16 января 2012

Я создал одну простую страницу в MVC, которая дается в стартовом проекте MVC фреймворком .net с небольшими изменениями в этом.

Я создал две модели

  1. Логин
  2. Регистрация

Создание двух контроллеров.

  1. LoginController
  2. RegisterController.

Тогда яиспользовать оба из них для отображения на моей домашней странице (например, Facebook, например)

Код модели: Логин Модель:

public class Login
{
    private string email;
    [Required]
    public string Email
    {
        get { return email; }
        set { email = value; }
    }
    private string password;
    [Required]
    public string Password
    {
        get { return password; }
        set { password = value; }
    }
}

Регистрация модели

public class Register
{
    private string email;
    [Required]
    public string Email
    {
        get { return email; }
        set { email = value; }
    }
    private string password;
    [Required]
    public string Password
    {
        get { return password; }
        set { password = value; }
    }
    private string name;
    [Required]
    public string Name
    {
        get { return name; }
        set { name = value; }
    }
}

Вид входа и регистрации создается с помощью опции «Создать».Оба содержат

  <input type="submit" value="Create" />

Теперь оба представления находятся на моей другой странице, домашней странице.

    @Html.Action("Index", "Login")
@Html.Action("Index", "Register")

Оба отображаются нормально, но когда я нажимаю любую из кнопок «Создать» нав любом из представлений также запускается событие в контроллере для другого.

Код моего контроллера .... Logincontroller.

public ActionResult Index()
    {
        return View();
    }
    [HttpPost]
    public ActionResult Index(Login lgobj)
    {
        System.Threading.Thread.Sleep(2000);
        string email = lgobj.Email;
        string password = lgobj.Password;
        return View();
    }

RegisterController:

  [HttpGet]
    public ActionResult Index()
    {
        return View();


    }

    [HttpPost]
    public ActionResult Index(Register model)
    {
        return View();
    }

Может ли кто-нибудь указать причину или что отсутствует в моем коде?

Если не ясно, пожалуйста, дайте мне знать, я опишу больше.

Ответы [ 4 ]

1 голос
/ 16 января 2012

Попробуйте изменить свой домашний вид на следующее:

@using (Html.BeginForm())
{
    @Html.Action("Index", "Login") 
}

@using (Html.BeginForm())
{
    @Html.Action("Index", "Register") 
}

Я думаю, что происходит то, что ваша отправка вызывает POST не тому контроллеру, поскольку нет четкого различия форм.

0 голосов
/ 17 января 2012

В этом сценарии (как указано в моем первом ответе)

Нам нужно использовать страницу динамического просмотра.( Дополнительная информация ) Выполните следующие действия:

  1. Создание типа DynamicViewPage:

    открытый класс DynamicViewPage: ViewPage {public new dynamic Model {get;приватный набор;}
    защищенное переопределение void SetViewData (ViewDataDictionary viewData) {base.SetViewData (viewData);Model = ViewData.Model;}}

  2. Ваш контроллер будет выглядеть как

    public Account ActionResult (string returnUrl) {LoginModel loginmodel = null; // Initialize Model;RegistrationModel registrationModel = null; // Инициализировать модель;,,,,.

        return View("Account", new
        {
            Login = loginmodel,
            Register = registrationModel
    
        });
    
  3. ваш вид должен наследоваться от

    Inherits = "DynamicViewPage"

Now @ Model.Login будетдаст вам Loginmodel

@Model.Регистр даст вам RegisterModel

Он должен работать, как вы ожидали .........

0 голосов
/ 16 января 2012

Небольшое изменение в том, что упомянуто @ Shark,

Нам необходимо указать действие и контроллер, на который индивидуальная форма будет отправлять данные. Если мы не укажем, обе формы будут публиковать на странице URL.

@using (Html.BeginForm("Index","Login")) 
{ 
    @Html.Action("Index", "Login")  
} 

@using (Html.BeginForm("Index","Register")) 
{ 
    @Html.Action("Index", "Register")  
}
0 голосов
/ 16 января 2012

Хорошо, у вас есть страница (представление), на которой отображаются две ссылки ActionLink. После нажатия на эти две ссылки ActionLink вы попадете в LoginController или RegisterController (в зависимости от ссылки, по которой вы щелкнули). В обоих случаях вы попадаете в ActionResult Index () соответствующего контроллера ... пока все хорошо!

Теперь ... попав внутрь Index (), вы просто вызываете return View () , но Я не вижу кода, показывающего, что эти представления строго типизированы! Попробуйте следующее:

LoginController:

public ActionResult Index() 
{ 
var model = new Login();
return View(model);
} 

RegisterController:

public ActionResult Index() 
{ 
var model = new Register();
return View(model);
} 

Предполагая, что вы создали два строго типизированных представления (Index.cshtml в папке Login и Index.cshtml в папке Register), убедитесь, что у каждого представления есть соответствующая форма и кнопка отправки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...