如何在ASP MVC视图中确定文本框的值

时间:2013-04-25 21:25:39

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-2

是否可以在同一个视图中访问文本框的值?例如,在我看来,我有以下文本框

@Html.TextBox("searchValue", ViewBag.CurrentFilter as string, new { placeholder = "Search" })

如果用户输入值,然后点击提交,页面会将该搜索条件发送到控制器,根据条件查询数据库,然后在视图中显示结果。再次渲染视图时,文本将保留在搜索框中并呈现标记

<input id="searchValue" name="searchValue" placeholder="Search" type="text" value="what i just typed in here" />

有没有办法让ASP MVC 3视图访问该文本框的value?我想创建一个类似于

的条件
    @if (searchValue.hasValue())
    {
        do something in here
    }

2 个答案:

答案 0 :(得分:2)

首次加载页面时,视图将同步呈现。在页面呈现时会评估所有Razor表达式,因此您获得的是静态HTML。您无法使用它来跟踪表单值的后续更改 - 仅基于其当前响应的初始值执行逻辑。

您需要使用Javascript。假设您有一个id myLink的链接。默认情况下,将其设置为display:none;。然后,使用jQuery,您可以执行以下操作:

<input id="searchValue" name="searchValue" ... />

<script type="text/javascript">
    $('#searchValue').change(function (){
         if($('#searchValue').val().length > 0) {
             $('#myLink').show();
         } else {
             $('#myLink').hide();
         }
    });
</script>

如果您需要更复杂的逻辑,可以使用部分视图切换链接并使用AJAX调用进行更新。

答案 1 :(得分:1)

也许我误解了,但看起来你用ViewBag.CurrentFilter填充搜索框,然后“当再次渲染视图时,文本保留在搜索框中”为“value =”我输入的内容这里“

听起来我觉得你已经知道搜索文本是什么,为什么你需要读取文本框的值?为什么逻辑不是

@if (`ViewBag.CurrentFilter` hasSomeValue)
{
    do something in here
}

如果我错过了这一点,请提前抱歉。