我正在创建一个表单,该表单包含一个根据用户输入的搜索从sql查询填充的选择(单选,但可打开下拉或其他)。
例如,如果我选择的是Location,我需要允许用户搜索"California",然后查看加利福尼亚州的城市列表。选项列表超过2万个,所以我不希望用户看到整个列表——他们需要能够搜索/筛选到合理数量的选项。(列表的过滤将在数据库端进行,存储过程正在处理逻辑。)
理想情况下,表单应该是这样的:
Field 1: [text]
---------------- (inserted partial)
Search: [text area] [submit button] --> sends of an sql query and reloads partial
Field 2: radio buttons --> these options loaded from sql query
---------------- (end partial)
Field 3: [text]
[submit button] --> submits all 3 field values to form handler
这是我的主要表单HTML:
@using (Html.BeginForm())
{
<div class="form-group">
@Html.LabelFor(model => model.Field1, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Field1, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Field1, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.Action("Field2_Lookup", "Field2", new { });
</div>
<div class="form-group">
@Html.LabelFor(model => model.Field3, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Field3, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Field3, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
</div>
}
这是Field2:的部分HTML
@using (Html.BeginForm())
{
<div class="form-horizontal">
<div class="form-group">
@Html.LabelFor(model => model.Field2_Name, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="form-horizontal">
<div class="col-md-10">
@Html.TextBox("SearchString")
<input type="submit" value="Search" class="btn btn-default" />
</div>
</div>
<div class="col-md-10">
@if (Model != null)
{
foreach (var item in Model.Field2)
{
<input type="radio" name="@Model.Field2_Name" value="@item.Field2" id="item.Field2_ID">@item.Field2<br />
@Html.ValidationMessageFor(model => item.Field2, "", new { @class = "text-danger" })
}
}
</div>
</div>
</div>
}
Field2控制器:
public ActionResult Field2_Lookup(string searchTerm)
{
if (!String.IsNullOrEmpty(searchTerm))
{
return View(DB.Field2_LookUp(searchTerm));
}
//Only return values if there is a searchTerm. If not, return an empty partial.
return View();
}
就用户流而言,当加载表单页面时,Field2分部应该为空,用户需要在搜索字段中输入文本,按下"搜索"按钮,然后用sql查询中的选项重新加载分部。
所以我的问题是:
- 如何让Field2 Search按钮只结束搜索形式?(当前此按钮结束整个页面的表单。)
- 如何仅重新加载分部,并将searchTerm传递给控制器
- 如何将Field2选择值传递到通用窗体
我知道我需要使用JavaScript,但我不确定实现方式(而且我是JavaScript的新手)。任何指向正确方向的指针都将不胜感激!!!
我正在使用MVC实体框架、Visual Studio 2015、C#、JavaScript、引导程序等。
-
我不确定你的意思是什么,你能重新表述这个问题吗?
-
您在这里所要做的就是返回部分视图。它应该看起来像这样:
return PartialView("PartialViewName", value(s) you want to pass back to view);
-
理解这个问题也有点困难。在我看来,你应该创建一个模型,并使用它来传递你的数据。