2014-01-30 3 views
0

У меня естьMVC ActionLink установить ViewBag за сценой

@Html.ActionLink("Search text", "Search", new { q="searchtext1" }); 

, который идет на:

http://website2312143.com/search/searchtext1

и я хочу, чтобы установить за кулисами, что фактический текст поиска "searchtext2" поэтому я Я пытаюсь передать это значение в действие Search, но все же отображает http://website2312143.com/search/searchtext1 пользователю.

В действии Search я пытаюсь получить «searchtext2» из ViewBag или любого другого механизма и отобразить данные.

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

Должно ли быть передано скрытое значение за сценой, используя @Html.ActionLink и получить это значение в разных действиях без того, чтобы пользователь заметил какую-либо разницу?

+0

Вы хотите использовать что-то вроде «q = viewbag.something»? – MustafaP

+0

Если я это сделаю, пользователь увидит URL как/search/searchtext2. Я все еще хочу показать/search/searchtext1 пользователю и передать «searchtext2» в действие назначения за сценой. – iefpw

+0

http://stackoverflow.com/questions/15444749/how-to-post-data-to-external-site-and-get-external-sites-action-result-from-my Я надеюсь, что эта ссылка вам поможет. – MustafaP

ответ

1

вы должны сделать это немного по-другому -

<script src="~/Scripts/jquery-1.10.2.min.js"></script> 
<script> 
    $(function() { 
     $('#me').click(function (e) { 
      e.preventDefault(); 
      $(this).parents('form').first().submit(); 
     }); 
    }); 
</script> 
@using (Html.BeginForm("Search", "Search", new { q = "searchtext1" }, FormMethod.Post)) 
{ 
    @Html.Hidden("OriginalSearchText", "SearchStringOriginal"); 
    @Html.ActionLink("Search text", "Search", null, new { id = "me" }); 
} 

Выход -

enter image description here

и д, вы можете получить строку запроса.

1

Не сразу с ActionLink будет генерировать URL-адрес (a GET).

Вы можете создать короткую форму, которая имеет action набор к ActionLink URL (Вы можете использовать @Url.Action("Search text", "Search", new { q="searchtext1" }) для этого тоже), а затем установить <input type='hidden' value='searchtext2' />. Это даст вам URL-адрес, который вы хотите, и прохождение скрытой переменной.

@using (Html.BeginForm("Search text", "Search", new { q = "searchtext1" }) 
{ 
    @Html.Hidden("searchtext2", "second search text") 
    <input type="submit" value="Search!" class="override so i don't look like a button" /> 
}