2015-10-04 3 views
-1

Я знаю similar question already asked, но мой вопрос связан с сохранением состояния страницы. Я использую ту же модель для простоты. Предположим, у меня есть следующая модель:Сохранять данные в нескольких формах страницы

public class LoginRegisterViewModel 
{ 
    public string LoginUsername { get; set; } 
    public string LoginPassword { get; set; } 

    public string RegisterUsername { get; set; } 
    public string RegisterPassword { get; set; } 
    public string RegisterFirstName { get; set; } 
    public string RegisterLastName { get; set; } 
} 

Я заинтересован в 2-х вещей:

1- я должен знать, какая кнопка которым была нажата

2- я должен сохранить как данные формы. Это означает, что когда пользователь уже заполнил LoginUsername для входа в систему, а затем решил зарегистрироваться на сайты и нажал кнопку Register, в ответ будет сохранено состояние формы.

Используя следующий подход:

@model LoginRegisterViewModel 

@using (Html.BeginForm("Login", "MemeberController", FormMethod.Post, new {})) { 

    @Html.LabelFor(m => m.LoginUsername) 
    @Html.TextBoxFor(m => m.LoginUsername) 

    @Html.LabelFor(m => m.LoginPassword) 
    @Html.TextBoxFor(m => m.LoginPassword) 

    <input type='Submit' value='Login' /> 

} 

@using (Html.BeginForm("Register", "MemeberController", FormMethod.Post, new {})) { 

    @Html.LabelFor(m => m.RegisterFirstName) 
    @Html.TextBoxFor(m => m.RegisterFirstName) 

    @Html.LabelFor(m => m.RegisterLastName) 
    @Html.TextBoxFor(m => m.RegisterLastName) 

    @Html.LabelFor(m => m.RegisterUsername) 
    @Html.TextBoxFor(m => m.RegisterUsername) 

    @Html.LabelFor(m => m.RegisterPassword) 
    @Html.TextBoxFor(m => m.RegisterPassword) 

    <input type='Submit' value='Register' /> 
} 

Я знаю, какая кнопка была нажата. Но я не знаю, какую информацию имеют другие формы. Если я использую только одну форму, я не знаю, какая кнопка была отправлена ​​в форму (я знаю, что могу пользователь Request.Form ["buttonvalue"], но я думаю, что это не чистое решение).

В худшем случае это возможно, что модель содержит информацию об одной сетки:

public class LoginRegisterViewModel 
{ 
    public string LoginUsername { get; set; } 
    public string LoginPassword { get; set; } 

    public string RegisterUsername { get; set; } 
    public string RegisterPassword { get; set; } 
    public string RegisterFirstName { get; set; } 
    public string RegisterLastName { get; set; } 

    public List<RowModel> Rows {get; set;} 
} 

Когда я просто отправить регистрационную форму, я не знаю текущую страницу, сортировка, фильтры на моей странице. Как MVC поможет этим проблемам?

Update 1:

Я не хочу использовать JavaScript и JQuery по некоторым причинам.

+0

Не мог бы вы, а не создать модель оболочки, которая имеет все свои модели и после этого? таким образом, вы можете иметь все данные в одном месте. – mahlatse

+0

У вас есть две отдельные формы, которые отправляются обратно на 2 отдельных метода. Вы знаете, какая кнопка нажата, какой метод действия ударил. Вы не можете получить значения в другой форме. Вам нужны две отдельные модели.Я предлагаю вам изучить код в 'AccountController', когда вы создаете новый проект в VS, чтобы понять, что вы должны делать. –

ответ

0

Если я правильно понимаю вашу проблему правильно, являются следующие моменты, которые могли бы помочь вам:

1) Обратите внимание, вы будете иметь доступ только к форме поля данных из формы, которую вы представляете.

2) Сформировать сценарий вы упомянули, если вы можете использовать JQuery/Ajax проводки затем нажатием кнопки входа в систему только после соответствующих входных данных и нажатием кнопки регистра пост как forms.Eg:

var dataToPost = $("#frmLogin, #frmRegister").serialize();// Onclick of Register button posting both form data

ПРИМЕЧАНИЕ: Для обработки вышеуказанной точки вам необходимо иметь модель обзора, которая может содержать как регистрационную информацию &.

3) В структуре формы вы задаете свой вопрос, так как хорошая практика всегда проверяет учетную информацию в отношении вашего db либо только при входе в систему.

4) Лучший способ проверить состояние данных будет состоять в проверке на базе данных в случае, если сеанс/кеш не является опцией.

Надеется, что это поможет вам ...