Member 11114915 - Tanvi Ответов: 1

Как вызвать значение из контроллера для просмотра с помощью tempdata в mvc4.


Нужно передать результат хранимой процедуры (столбец с именем 'username') В представление домашней страницы. Здесь логин и пароль, предоставленные пользователем, передаются в хранимой процедуре
AM1_Login
.

ВАР рез = БД.AM1_Login(мод.loginid, мод.пароль).Список();
if (Res. Count > 0)
{
Данных Tempdata["УСР"] = Рез. В Список();
return RedirectToAction("Home", " Login");

}


Var Res содержит ниже:

-		Res	Count = 1	System.Collections.Generic.List<string>
		[0]	"UserName"	string
+		Raw View		


Что я уже пробовал:

Я попробовал использовать TempData, как это лучше всего делать в случае перенаправления. Но не удалось получить результат proc на домашней странице.

Karthik_Mahalingam

содержит ли TempData["Usr"] данные?
и как вы получаете доступ к tempdata в cshtml

Member 11114915 - Tanvi

Эй.. TempData ["Usr"] содержит данные, которые совпадают с данными 'Res'

Richard Deeming

"Здесь логин и пароль, предоставленные пользователем, передаются в хранимой процедуре"

Похоже, вы храните пароли в обычном тексте. Не делай этого. Вы должны всегда хранить только соленый хэш пароля, используя уникальную соль для каждой записи.

Безопасная Аутентификация Паролем Объясняется Просто[^]
Соленое хэширование паролей - все правильно[^]

Member 11114915 - Tanvi

спасибо, Ричард...обязательно постараюсь реализовать то же самое....:)

1 Ответов

Рейтинг:
0

David_Wimbley

Существует множество способов передачи данных от контроллера к представлению. Что не ясно, так это то, что если вы пытаетесь отправить данные из представления контроллеру, а затем перенаправить их на другое представление и все еще поддерживать те же самые данные, поэтому я дам вам несколько вариантов.

1) отображение данных с вашего контроллера в поле вашего зрения

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new IndexModel();
        model.Username = "dwimbley";
        return View(model);
    }
}


По вашему мнению, вы должны были бы

@model IndexModel

@Model.Username


Что бы показать двимбли

Это считается строго типизированным представлением. Я предпочитаю этот вариант другим, так как считаю, что обработка всего через viewbag или tempdata создает кошмар, если в вашей команде есть другие разработчики.

2) допустим, вы отправили форму на действие в контроллере. После этого действия вы хотите отобразить что-то в другом представлении, которое, как я думаю, может быть тем, о чем вы просите.


public class HomeController : Controller 
{
   public ActionResult Index()
   {
        TempData["username"] = "dwimbley";
        return RedirectToAction("About");
   }

   public ActionResult About()
   {
       return View();
   }
}


Так как индексное действие перенаправляется на о. Единственное представление, которое имеет значение, - это файл. cshtml. Кроме того, в отличие от приведенного выше примера, вам не нужна модель, так как вы используете tempdata.

@TempData["username"]


Одно предложение здесь. Если вы пытаетесь сохранить объект как tempdata, а затем вернуть его к типу объекта, который он должен быть на ваш взгляд, вы нарушаете принципы MVC. Я настоятельно рекомендую вам использовать строго типизированный маршрут представления и использовать TempData/ViewBag/ViewData только в качестве исключений для элементов, которые не вписываются в вашу модель представлений.


Member 11114915 - Tanvi

спасибо, Дэвид...я разобрал это по-другому manner..by использование elementat () ... спасибо за решение....:)