是否可以在同一个视图中访问文本框的值?例如,在我看来,我有以下文本框
@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
}
答案 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
}
如果我错过了这一点,请提前抱歉。