如何在同一视图中获取剃刀文本框的值?

时间:2016-03-08 15:55:36

标签: c# asp.net-mvc razor

我在Razor视图页面中使用`@ Html.Textbox(“searchString”)。我需要

中的文本框值
@Html.ActionLink("View Items", "Index", new { id = item.transaction_id, searchString = "Value of textbox"}).

当然,html动作链接中的搜索字符串部分现在不能正常工作,但我需要这个,因为我有根据搜索字符串工作的特定路由。

如何将文本框的值传递给操作链接?

我查看thisthisthisthis

我尝试的是

<script type = "text/javascript">
var value = document.getElementbyID("searchString").Text;
var link =  @Html.ActionLink("View Items", "Index", new { id = item.transaction_id, searchString = -1});
link.replace(-1,value);
</script>

仍然没有运气。我理解Razor在服务器端呈现。

更新

我在视图顶部有以下文本框:

    @using (Html.BeginForm("Index", "trans_junction", FormMethod.Get))
{
<p>
    Request No: @Html.TextBox("searchString")
    <span><input type="submit" value="Search Request" /></span>
</p>
}

此文本框是搜索框,用户可以在其中搜索项目。

有一个Action链接如下:

 @Html.ActionLink("View Items", "Index", new { id = item.transaction_id }) |

和路线配置:

public class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

        routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{id}/{searchString}",
            defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional, searchString= UrlParameter.Optional }
        );
    }
}

现在我需要通过actionlink传递值作为我的路线图。正如StephenMuecke在回答中所建议的那样,我尝试使用@using (Html.BeginForm("Index", "trans_junction", FormMethod.Get))修改我的@using (Html.BeginForm("Index", "trans_junction", new { id = item.transaction_id }, FormMethod.Get)) 但那里没有物品。

当用户点击搜索按钮时,网址为http://localhost:57286/trans_junction/Index?searchString=20

如果用户点击操作链接网址为http://localhost:57286/trans_junction/Index/88

但实际上我需要的是http://localhost:57286/trans_junction/Index/88/20

保存搜索结果并传递id。

我正在添加屏幕截图以便更好地理解。

这是没有搜索的索引视图。

enter image description here

这是searchString = 10的搜索结果。 enter image description here

这是在点击操作链接后,即查看项目,此处不保留搜索结果。 enter image description here

3 个答案:

答案 0 :(得分:3)

使用带有method="get"的表单,而不是手动尝试使用javascript操纵链接。在你的循环中

@using (Html.BeginForm("Index", "trans_junction", new { id = item.transaction_id }, FormMethod.Get))
{
    @Html.TextBox("SearchString")
    <button type="submit">View Items"</button> // style as a link if desired
}

将对

进行GET调用
[HttpGet]
public ActionResult Index(int id, string searchString)

假设您具有

的特定路线定义
url: "trans_junction/Index/{id}/{searchstring}",
defaults: new { controller = "trans_junction", action = "Index" }

修改(根据更新的问题详情)

当您返回过滤结果时,您还需要将searchString的值传回视图,以便可以使用in来生成ActionLink()方法中的路由值,例如

ViewBag.Filter = searchString;
return View(....);

然后修改指向

的链接
@Html.ActionLink("View Items", "Index", new { id = item.transaction_id, searchString = ViewBag.Filter })

答案 1 :(得分:0)

您需要在事件上设置值,例如单击ActionLink,否则您如何知道要在Actionlink中替换的searchString文本框的值。在您的网页上添加此JavaScript。

$(function(){
    $("#myLink").click(function(){
        var link = $(this).attr("href");
        link.replace(-1, $(#searchString).val());
        var link = $(this).attr("href", link);
    });
});​​​​

你的Razor视图actionlink需要

@Html.ActionLink("View Items", "Index", new { id = item.transaction_id, searchString = "-1"})

答案 2 :(得分:-2)

尝试:

ABC123  AAA000
Z15X97  A00A00

P.S。当有人输入 @{ var value = Request.Form["inputID"]; } 时,您为什么不使用表单而不是链接并提交表单?

无论是谁贬低了这个答案你都可以论证为什么或提出更好的解决方案?因为在他的情况下,searchString应该按照他的要求行事。