2012-02-01 1 views
0

В asp.net MVC3, как я могу реализовать вход, что он делает GET, используя параметры запроса исходной веб-страницы? Я предпочитаю не использовать скрытые входы.Вход ASP.NET MVC3 делает GET с использованием параметров запроса

Обновление. Например, моя страница содержит параметр запроса id = 54, когда ввод вызывает GET, мне нужен контроллер назначения/действие, которое получает этот параметр запроса.

// could i change it for include query parameters of source page? 
using (Html.BeginForm("Action", "Controller", FormMethod.Get)) 
{ 
    <input type="submit" value="Text" onclick="submit"/> 
} 
+0

Пожалуйста, перефразировать вопрос, я не понимаю. Вы хотите реализовать альтернативу скрытым входам при отправке форм в ASP.NET MVC 3? – Rhapsody

+0

Кажется невозможным: http://stackoverflow.com/questions/1116019/submitting-a-get-form-with-query-string-params-and-hidden-params-disappear Может ли кто-нибудь подтвердить? – fravelgue

ответ

1

Решение вашей проблемы является именно это:

Html.BeginForm("Action", "Controller", new { id = 54 }, FormMethod.Get) 
+0

Обратите внимание, что параметры запроса в действии форм игнорируются. http://www.w3.org/TR/html401/interact/forms.html#form-data-processing – fravelgue

+0

Я уверен, что это работает, и я не нашел причин, чтобы в вашей ссылке не было причин. Форма в ответе будет передаваться где-то вроде:/Controller/Action? Id = 54. В чем проблема? –

+0

Если вы используете HTTP GET и используете параметры запроса в действии форм, браузер не отправляет параметры запроса. Вы можете проверить с помощью скрипача: \t \t \t <форма действия = "HTTP: // локальный идентификатор = 1" метод = "получить"> \t \t \t <входной тип = "Отправить" значение =» представить»/> \t \t \t – fravelgue

0

Используйте это: ControllerContext.HttpContext.Request.UrlReferrer.ToString(); Если это не поможет, вы можете использовать глобальный фильтр (зарегистрировать его на global.asax)

protected void Application_Start() 
{ 
    GlobalFilters.Filters.Add(new PreviousUrlSavingFilter()) 
} 

public class PreviousUrlSavingFilter: ActionFilterAttribute 
{ 
    protected override OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     filterContext.HttpContext.Session["PreviousRouteData"] = filterContext.RouteData; 
    } 

    // use this property to access previous page route data 
    public static RouteData PreviousUrlData 
    { 
     return (RouteData) HttpContext.Current.Session["PreviousRouteData"]; 
    } 
} 

Если вы хотите изменить текущий URL, используя предыдущие параметры URL, эта ссылка будет вам полезна: https://stackoverflow.com/a/4222584/571203

+0

Thx для вас ответ. Хороший трюк ;-), но я думаю, что будет другой вариант, я думаю, что предпочитаю скрытые материалы для вашего ответа. Некоторые прокси могут удалить urlreferrer, и я хочу только избежать лишних скрытых входов. – fravelgue

+0

Ответ был обновлен, надеюсь, он вам поможет. –

+0

Итак, могу ли я изменить URL-адрес, который вводит GET для включения параметров запроса? – fravelgue

0

Я бы использовал TempData для хранения таких временных данных, tempdata сохраняется для одной маршрутизации после ее чтения, она должна быть удалена, если не используется метод keep.