Как я могу возвратить текущее действие в представлении ASP.NET MVC?

ВАЖНО

. Лучший способ предотвратить SQL Injection - использовать подготовленные выражения вместо экранирования , поскольку демонстрирует принятый ответ .

Существуют библиотеки, такие как Aura.Sql и EasyDB , которые позволяют разработчикам легче использовать подготовленные инструкции. Чтобы узнать больше о том, почему подготовленные операторы лучше в останавливать SQL-инъекцию , см. этот mysql_real_escape_string() обход и недавно зафиксированные уязвимости Unicode SQL Injection в WordPress .

Предотвращение впрыска - mysql_real_escape_string ()

У PHP есть специально созданная функция для предотвращения этих атак. Все, что вам нужно сделать, это использовать функцию функции mysql_real_escape_string.

mysql_real_escape_string берет строку, которая будет использоваться в запросе MySQL, и возвращает ту же строку со всеми попытками внедрения SQL безопасно сбежал. В принципе, это заменит эти неприятные кавычки ('), которые пользователь может ввести с помощью заменителя в MySQL, сэкономленная цитата.

ПРИМЕЧАНИЕ: вы должны подключиться к базе данных, чтобы использовать эту функцию!

// Подключение к MySQL

$name_bad = "' OR 1'"; 

$name_bad = mysql_real_escape_string($name_bad);

$query_bad = "SELECT * FROM customers WHERE username = '$name_bad'";
echo "Escaped Bad Injection: 
" . $query_bad . "
"; $name_evil = "'; DELETE FROM customers WHERE 1 or username = '"; $name_evil = mysql_real_escape_string($name_evil); $query_evil = "SELECT * FROM customers WHERE username = '$name_evil'"; echo "Escaped Evil Injection:
" . $query_evil;

Более подробную информацию вы найдете в MySQL - SQL Injection Prevention .

290
задан Aristos 2 January 2014 в 13:08
поделиться

6 ответов

Используйте ViewContext и посмотрите RouteData набор для извлечения и контроллера и элементов действия. Но я думаю, устанавливая некоторую переменную данных, которая указывает на контекст приложения (например, "editmode" или "ошибка"), а не контроллер/действие уменьшает связь между Вашими представлениями и контроллерами.

83
ответ дан Amirhossein Mehrvarzi 23 November 2019 в 01:43
поделиться

В RC можно также извлечь данные маршрутов как имя метода действия как это

ViewContext.Controller.ValueProvider["action"].RawValue
ViewContext.Controller.ValueProvider["controller"].RawValue
ViewContext.Controller.ValueProvider["id"].RawValue
<час>

Обновление для Обновления MVC 3

ViewContext.Controller.ValueProvider.GetValue("action").RawValue
ViewContext.Controller.ValueProvider.GetValue("controller").RawValue
ViewContext.Controller.ValueProvider.GetValue("id").RawValue

для Обновления MVC 4

ViewContext.Controller.RouteData.Values["action"]
ViewContext.Controller.RouteData.Values["controller"]
ViewContext.Controller.RouteData.Values["id"]

для MVC 4.5

ViewContext.RouteData.Values["action"]
ViewContext.RouteData.Values["controller"]
ViewContext.RouteData.Values["id"]
465
ответ дан awe 23 November 2019 в 01:43
поделиться

Получить текущий идентификатор на Представлении:

ViewContext.RouteData.Values["id"].ToString()

Для получения текущего контроллера:

ViewContext.RouteData.Values["controller"].ToString() 
60
ответ дан tsquillario 23 November 2019 в 01:43
поделиться

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

ViewData["CssClass"] = "bold";

и выбирают это значение от Вашего ViewData в Вашем Представлении

9
ответ дан terjetyl 23 November 2019 в 01:43
поделиться

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

На мой взгляд, более простым способом было бы переопределить метод OnActionExecuting . Вам передается ActionExecutingContext , который содержит член ActionDescriptor , который вы можете использовать для получения искомой информации, которая является ActionName, и вы также можете получить доступ к ControllerDescriptor, и он содержит ControllerName.

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    ActionDescriptor actionDescriptor = filterContext.ActionDescriptor;
    string actionName = actionDescriptor.ActionName;
    string controllerName = actionDescriptor.ControllerDescriptor.ControllerName;
    // Now that you have the values, set them somewhere and pass them down with your ViewModel
    // This will keep your view cleaner and the controller will take care of everything that the view needs to do it's job.
}

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

41
ответ дан 23 November 2019 в 01:43
поделиться

Я голосую за 2:

string currentActionName = ViewContext.RouteData.GetRequiredString("action");

и

string currentViewName = ((WebFormView)ViewContext.View).ViewPath;

Вы можете получить как физическое имя текущего представления, так и действие, которое его запустило. Это может быть полезно на частичных страницах * .acmx для определения хост-контейнера.

6
ответ дан 23 November 2019 в 01:43
поделиться
Другие вопросы по тегам:

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