它有点满口,但我认为有两个下拉列表:
<div>
@Html.LabelFor(m => m.APlayerID)
@Html.DropDownListFor(m => m.APlayerID, Model.AbzPlayers, "Please select", new { id = "abz" })
</div>
<div>
@Html.LabelFor(m => m.EPlayerID)
@Html.DropDownListFor(m => m.EPlayerID, Model.EdzPlayers, "Please select", new { id = "edz" })
</div>
根据这些,我有一个部分观点:
<div id="partialview" class="panel-body">
@Html.Partial("SingleResultsView", Model.SingleResults)
</div>
我想根据从下拉菜单中选择的玩家来更新此部分视图,最好是在更改时。
我已经在这上面查了大量示例,但似乎找不到任何通过过滤的Model.SingleResults.Where的内容(x =&gt; x.abzID == abz&amp;&amp; x.edz == edz)通过。我的视图位于共享文件夹中,因此它没有控制器,在查找解决方案时始终存在问题,因为每个人似乎都给出了控制器/视图URL!
我能够使用类似的东西显示部分视图,但它显然没有使用abz和edz(下拉列表中的值)做任何事情,因为我不知道如何传递模型:
$(function () {
$('#abz').change(function () {
var value = $(this).val();
$.ajax({
url: "@Url.Content("Shared/SingleResultsView")",
type: 'GET',
cache: false,
success: function (value) {
$("#partialview").html(value);
}
});
});
});
帮助将非常感谢!
提前致谢
答案 0 :(得分:1)
您需要一个返回局部视图的操作。部分视图本身无法做任何事情。
public ActionResult SingleResults(string abzID, string edz)
{
// do something with the passed params
return PartialView("SingleResultsView", model) // where model is an instance of what the view needs to render itself with
}
答案 1 :(得分:0)
一般来说,您不想尝试直接加载局部视图。为什么?嗯,这不是MVC管道的工作原理。期。相反,向控制器添加一个动作方法,生成第一个页面(具有下拉列表的页面)并具有控制器格式并将部分视图返回到您的javascript。我们假设您有一个控制器,如下所示:
public class Players : IController
{
//This is the method that loads the first page
public ActionMethod Index()
{
return View();
}
//This method loads the partial html on change
[HttpPost]
public ActionMethod GetPartialView(int? abz)
{
var item = items.SingleResults.Where(x=>x.abzID == abz && x.edz == edz)
return View("partialViewName", item);
}
}
以上控制器使用POST(我更喜欢,但您也可以使用GET)向控制器提交请求以获取html。然后,你像这样构建你的javascript(假设是jQuery,对吧?):
$(document).ready(function () {
$('#abz').change(function () {
var value = $(this).val();
$.ajax({
url: "Players/GetPartialView",
type: 'POST',
data: { abz: $(this).val() }
cache: false,
success: function (value) {
$("#partialview").html(value);
}
});
});
});
答案 2 :(得分:0)
您可以使用控制器操作。无论您的视图位于何处,您都可以为部分视图结果调用控制器操作,例如:
$.ajax({
url: "@Url.Action("yourAction", "yourController", new { someinput = someValue})",
type: 'GET', //could also be post
cache: false,
success: function (value) {
$("#partialview").html(value);
});
您的控制器操作如下:
public ActionResult SomeAction(<yourType> someInput){
... //Do something with input
return PartialView("Shared/SingleResultsView", <your model that SingleResultsView takes>)
}
您还可以对onchange
帮助程序使用DropDownFor
属性:
@Html.DropDownListFor(m => m.APlayerID, Model.AbzPlayers, "Please select", new { id = "abz", onchange = "javascript: someFunction();" });