【问题标题】:How to determine value of text box in ASP MVC view如何确定 ASP MVC 视图中文本框的值
【发布时间】:2013-04-25 21:25:38
【问题描述】:

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

@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
    }

【问题讨论】:

  • 在这种情况下你到底想做什么?
  • 尝试根据文本框是否有值向页面添加内容
  • 你能用 JQuery 做吗?通过检查$('#searchValue').Val(),然后根据需要进行 Ajax 发布/获取?
  • 是的,我建议使用 javascript 执行此操作,因为该代码旨在在客户端执行。你能否更具体地说明你想对盒子上的文字做什么?您要显示的文本是您需要从数据中获取的内容,还是默认定义的?
  • 它是指向另一个控制器的索引页面的链接。基本上,如果文本框有一个值,那么应该显示链接。如果没有值,则没有链接。

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


【解决方案1】:

当页面首次加载时,视图会同步呈现。所有 Razor 表达式都会在页面呈现时进行评估,因此您得到的是静态 HTML。您不能使用它来跟踪表单值的后续更改 - 只能根据当前响应的初始值执行逻辑。

您需要使用 Javascript。假设您有一个与idmyLink 的链接。默认设置为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 调用对其进行更新。

【讨论】:

    【解决方案2】:

    也许我误解了,但看起来您正在使用ViewBag.CurrentFilter 填充搜索框,然后“当再次呈现视图时,文本留在搜索框中”为“value =“我刚刚在此处输入的内容”

    听起来您已经知道搜索文本是什么,那么为什么需要读取文本框的值?为什么逻辑不正确

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

    如果我错过了重点,请提前道歉。

    【讨论】:

    • 我认为这个问题与基于文本框变化时的当前值动态隐藏和显示内容有关,为此他需要jQuery。
    猜你喜欢
    • 2021-07-11
    • 2011-03-03
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多