ASP.NET MVC: возвратите Перенаправление и ViewData

Другим способом решения этой проблемы является не полагаться на правильное возвращаемое значение с дисплея, а полагаться на разрешение ресурсов Android.

Создайте файл layouts.xml в папках res/values-land и res/values-port со следующим содержимым:

res / values-land / layouts.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="is_landscape">true</bool>
</resources>

res / values-port / layouts.xml:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="is_landscape">false</bool>
</resources>

Теперь в своем исходном коде вы можете получить доступ к текущей ориентации следующим образом:

context.getResources().getBoolean(R.bool.is_landscape)
10
задан rahul 6 July 2009 в 07:00
поделиться

5 ответов

Вы, вероятно, захотите использовать свойство TempData , оно будет сохранено до следующего HTTP-запроса.

17
ответ дан 3 December 2019 в 18:00
поделиться

Почему бы не обработать логин через AJAX вместо полного сообщения? Вы можете легко предоставить статус, URL-адрес перенаправления и любые сообщения об ошибках через JSON.

public ActionResult Logon( string username, string password )
{
     ...

     // Handle master page login
     if (Request.IsAjaxRequest())
     {
          if (success)
          {
              return Json( new { Status = true, Url = Url.Action( "Index", "Home" ) } );
          }
          else
          {
              return Json( new { Status = false, Message = ... } );
          }
     }
     else // handle login page logon or no javascript
     {
          if (success)
          {
              return RedirectToAction( "Index", "Home" );
          }
          else
          {
              ViewData["error"] = ...
              return View("Logon");
          }
      }
  }

На стороне клиента

  $(function() {
      $('#loginForm input[type=submit]').click( function() {
          $('#loginError').html('');
          $.ajax({
             url: '<%= Url.Action("Logon","Account") %>',
             dataType: 'json',
             type: 'post',
             data: function() { return $('#loginForm').serialize(); },
             success: function(data,status) {
                 if (data.Status) {
                     location.href = data.Url;
                 }
                 else {
                     $('#loginError').html( data.Message );
                 }
             }
          });
          return false;
      });
  });
2
ответ дан 3 December 2019 в 18:00
поделиться

Обычно для большинства веб-сайтов, когда пользователь не проходит аутентификацию (из-за пароля или чего-то подобного), он переходит на другую страницу, которая помогает пользователю (например, получить пароль или попросить пользователя зарегистрироваться), что редко остается на той же странице. Я думаю, вы можете еще раз подумать, что вам действительно нужна навигация, которую вы используете.

Хорошо, одно решение, если вы действительно хотите придерживаться своей модели, состоит в том, что вы можете прикрепить ошибку входа в систему к URL-адресу. Например, http://www.example.com/index.aspx?login_error=1 указывает, что возникает ошибка, и вы можете использовать BEGIN_REQUEST (или HTTP-модуль), чтобы зафиксировать это и сообщить состояние модели. об ошибке:

ModelState.AddModelError(...);

Кстати, Добавление ошибки модели на самом деле является более правильным способом информирования представления о любой ошибке, чем использование ViewState (это похоже на выдачу исключения и возвращение целого числа о результате выполнения в старые времена).

При использовании AJAX для входа в систему (как предложенный tvanfosson) вполне достижимо, и иногда он превосходит пользовательский интерфейс, классический полный пост по-прежнему незаменим (подумайте, что какой-то пользователь отключит javascript или даже на моем телефоне дампа WM6, который не поддерживает javascript).

1
ответ дан 3 December 2019 в 18:00
поделиться

Я запуталась. Разве

return View();

не возвращает вам только текущую страницу?

Итак, в вашем случае, когда не удается войти в систему, установите данные просмотра и вызовите return View ();

т.е.

if (!FailedLogin) {
  //Go to success page
}else{
  //Add error to View Data or use ModelState to add error
  return View();
}

Используете ли вы [Авторизовать ] декоратор? Процесс входа в систему MVC автоматически запрашивает страницу входа и затем возвращает вас к действию контроллера, которое вы пытались выполнить. Сокращает количество перенаправлений.

1
ответ дан 3 December 2019 в 18:00
поделиться

Следующий пример, надеюсь, поможет вам в решении этой проблемы:

View.aspx

<%= Html.ValidationSummary("Login was unsuccessful. Please correct the errors and try again.") %>
<% using (Html.BeginForm()) { %>
    <div>
        <fieldset>
            <legend>Account Information</legend>
            <p>
                <label for="username">Username:</label>
                <%= Html.TextBox("username") %>
                <%= Html.ValidationMessage("username") %>
            </p>
            <p>
                <label for="password">Password:</label>
                <%= Html.Password("password") %>
                <%= Html.ValidationMessage("password") %>
            </p>
            <p>
                <%= Html.CheckBox("rememberMe") %> <label class="inline" for="rememberMe">Remember me?</label>
            </p>
            <p>
                <input type="submit" value="Log On" />
            </p>
        </fieldset>
    </div>
<% } %>

AccountController.cs

private bool ValidateLogOn(string userName, string password)
{
    if (String.IsNullOrEmpty(userName))
    {
        ModelState.AddModelError("username", "You must specify a username.");
    }
    if (String.IsNullOrEmpty(password))
    {
        ModelState.AddModelError("password", "You must specify a password.");
    }
    if (!MembershipService.ValidateUser(userName, password))
    {
        ModelState.AddModelError("_FORM", "The username or password provided is incorrect.");
    }
    return ModelState.IsValid;
}

Вы не сможете получить информацию, добавленную в ViewData после действия перенаправления. так что правильный подход - вернуть тот же View () и использовать ModelState для ошибок, о которых также упоминает «xandy».

Надеюсь, это даст вам фору при проверке формы.

1
ответ дан 3 December 2019 в 18:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: