ASP.控制器中可选的@URIaction方法链接到单选按钮
本文关键字:方法 链接 单选按钮 @URIaction 控制器 ASP | 更新日期: 2023-09-27 18:09:22
我有两个方法在我的asp.net mvc控制器中搜索google maps Places API来执行自动完成操作,因为用户在文本中键入。
在后台,我理解data-otf-autocomplete函数在后台使用JQUERY UI autocomplete来调用表单上的这些方法。我必须诚实地承认,我并不完全理解JQUERY UI部分,因为我是从Scott Allen的优秀Pluralsight课程中用ASP构建应用程序的AJAX课程中的另一个OdetoCode示例中改编的。NET MVC4(顺便说一句,很棒的课程)。Scott课程的原始代码链接到本地数据库以返回JSON来完成自动完成功能,我已经适应了连接到Google MAPS Places API。现在我有两个搜索框,每个都链接到控制器上的不同方法。其中一个使用位置搜索(最适合于近似地址,爱尔兰的大多数农村地址都属于这一类),而另一个适用于精确的街道地址。是否有可能将这两个连接到一个单选按钮控件在我看来,所以你有一个单一的搜索框并根据所选的单选按钮选项(例如位置/地址)它自动将请求路由到相关的方法控制器
@model IPagedList<RestaurantListViewModel>
@{
ViewBag.Title = "Home Page";
}
<form method="get" action="@Url.Action("Index")"
data-otf-ajax="true" data-otf-target="#List">
<input type="search" name="searchTerm" data-otf-autocomplete="@Url.Action("Autocomplete_Address")" />
</form>
<form method="get" action="@Url.Action("Index")"
data-otf-ajax="true" data-otf-target="#List">
<input type="search" name="searchTerm" data-otf-autocomplete="@Url.Action("Autocomplete_Locality")" />
</form>
@Html.Partial("_Restaurants", Model)
你就不能让搜索框旁边有两个单选按钮吗?
<input type="radio" name="SearchType" value="local" checked>Locality
<input type="radio" name="SearchType" value="exact">Exact Address
你只需要一个表单,然后张贴到控制器中的方法,在方法中检查单选按钮的值,并基于此运行你的逻辑。
更新Razor视图:
@using (Html.BeginForm("ControllerMethod", "YourController", null, FormMethod.Post))
{
<input type="radio" name="SearchType" value="local" checked>Locality
<input type="radio" name="SearchType" value="exact">Exact Address
}
ControllerMethod
[HttpPost]
public ActionResult ControllerMethod(FormCollection form)
{
var SearchType = form["SearchType"];
........
}
使用Stephen Muecke建议的完整工作代码
@model IPagedList<RestaurantListViewModel>
@{
ViewBag.Title = "Home Page";
}
<script type = "text/javascript" >
function ShowHideDiv() {
var chkAddress = document.getElementById("chkAddress");
var inputAddbox = document.getElementById("inputAddress");
inputAddbox.style.display = chkAddress.checked ? "block" : "none";
var chkLocality = document.getElementById("chkLocality");
var inputLocality = document.getElementById("inputLocality");
inputLocality.style.display = chkLocality.checked ? "block" : "none";
}
</script>
<form method="get" action="@Url.Action("Index")"
data-otf-ajax="true" data-otf-target="#restaurantList">
<div>
<input type="search" id="inputAddress" name="searchTerm" data-otf-autocomplete="@Url.Action("Autocomplete_Address")" checked/>
<input type="search" id="inputLocality" name="searchTerm" data-otf-autocomplete="@Url.Action("Autocomplete_Locality")" />
</div>
<label for="chkAddress">
<input type="radio" id="chkAddress" name="chkType" onclick="ShowHideDiv()" />
Search by Address
</label>
<label for="chkLocality">
<input type="radio" id="chkLocality" name="chkType" onclick="ShowHideDiv()" />
Search by Location
</label>
</form>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
<script language="javascript">
$(document).ready(function () {
$("#inputLocality").hide();
$("#chkAddress").prop('checked', true);
});
</script>
}