似乎无法呈现局部视图 - 控制器未被击中
Can't seem to render partial view - controller not being hit
我有一个下拉列表,我想根据选择的项目呈现局部视图。为此,我使用 jquery 和 MVC 5。在我的控制器中放置断点后,当我更改下拉选择时,我的 Url.Action() 调用似乎没有到达那里。我不确定我是否理解如何正确使用路由值,所以可能就是这样。这就是我得到的:
起始视图的相关部分
<div>
@if (role == "admin")
{
<p>Choose state to view:</p>
<select id="stateList">
<option value="AL">Alabama</option>
<option value="AR">Arkansas</option>
<option value="DE">Delaware</option>
<option value="FL">Florida</option>
<option value="GA">Georgia</option>
<option value="IA">Iowa</option>
<option value="IL">Illinois</option>
<option value="IN">Indiana</option>
<option value="KS">Kansas</option>
<option value="KY">Kentucky</option>
<option value="LA">Louisiana</option>
<option value="MD">Maryland</option>
<option value="MS">Mississippi</option>
<option value="MO">Missouri</option>
<option value="NC">North Carolina</option>
<option value="NE">Nebraska</option>
<option value="NJ">New Jersey</option>
<option value="OH">Ohio</option>
<option value="OK">Oklahoma</option>
<option value="SC">South Carolina</option>
<option value="TN">Tennessee</option>
<option value="TX">Texas</option>
<option value="VA">Virginia</option>
<option value="WV">West Virginia</option>
</select>
<div id="#partialPlaceHolder">
</div>
}
JQuery 到达控制器
//Load partial view when an admin changes the state selection
$('#stateList').change(function () {
var selection = $(this).val();
var url = '@Url.Action("StateData", "Visualizations")' + '?StateID=' + selection;
//url ends up looking like this: /Visualizations/StateData?StateID=IA (or some other state abbreviation)
$("#partialPlaceHolder").load(url, function () {
console.log("it worked");
});
});
型号
public class VisualizationModels
{
public String StateID { get; set; }
}
生成局部视图的控制器
public ActionResult StateData(string stateID)
{
VisualizationModels vm = new VisualizationModels();
vm.StateID = stateID;
return PartialView("_SpecificStateData", vm);
}
更新
奇怪的是,如果我使用 $.get
而不是 @Url.Action
,我实际上会点击控制器操作,只是出于某种原因现在不会渲染局部视图...
//Load partial view when an admin changes the state selection
$('#stateList').change(function () {
var selection = $(this).val();
var url = '/Visualizations/StateData?StateID=' + selection;
$.get(url, function (data) {
$('#partialPlaceHolder').html(data);
});
你不能用这样的东西吗
var url = '@Url.Action("StateData", "Visualizations", new { StateID = selection})'
而不是
var url = '@Url.Action("StateData", "Visualizations")' + '?StateID=' + selection;
并检查这是否有效。因为如果您的参数无法正确传递。您的路由处理程序将无法映射正确的操作方法。
我想通了...这是最愚蠢、最讨厌的小问题。在我的主视图中(在我原来的 post 的顶部)我输入了 div
的 id
错误...
错误:
<div id="#partialPlaceHolder"></div>
右:
<div id="partialPlaceHolder"></div>
现在一切正常。最终 JS 看起来像这样:
//Load partial view when an admin changes the state selection
$('#stateList').change(function () {
var selection = $(this).val();
var url = '@Url.Action("StateData", "Visualizations", new { StateID = "_state" })'.replace("_state", selection);
$("#partialPlaceHolder").load(url, function () {
console.log("it worked");
});
});
我有一个下拉列表,我想根据选择的项目呈现局部视图。为此,我使用 jquery 和 MVC 5。在我的控制器中放置断点后,当我更改下拉选择时,我的 Url.Action() 调用似乎没有到达那里。我不确定我是否理解如何正确使用路由值,所以可能就是这样。这就是我得到的:
起始视图的相关部分
<div>
@if (role == "admin")
{
<p>Choose state to view:</p>
<select id="stateList">
<option value="AL">Alabama</option>
<option value="AR">Arkansas</option>
<option value="DE">Delaware</option>
<option value="FL">Florida</option>
<option value="GA">Georgia</option>
<option value="IA">Iowa</option>
<option value="IL">Illinois</option>
<option value="IN">Indiana</option>
<option value="KS">Kansas</option>
<option value="KY">Kentucky</option>
<option value="LA">Louisiana</option>
<option value="MD">Maryland</option>
<option value="MS">Mississippi</option>
<option value="MO">Missouri</option>
<option value="NC">North Carolina</option>
<option value="NE">Nebraska</option>
<option value="NJ">New Jersey</option>
<option value="OH">Ohio</option>
<option value="OK">Oklahoma</option>
<option value="SC">South Carolina</option>
<option value="TN">Tennessee</option>
<option value="TX">Texas</option>
<option value="VA">Virginia</option>
<option value="WV">West Virginia</option>
</select>
<div id="#partialPlaceHolder">
</div>
}
JQuery 到达控制器
//Load partial view when an admin changes the state selection
$('#stateList').change(function () {
var selection = $(this).val();
var url = '@Url.Action("StateData", "Visualizations")' + '?StateID=' + selection;
//url ends up looking like this: /Visualizations/StateData?StateID=IA (or some other state abbreviation)
$("#partialPlaceHolder").load(url, function () {
console.log("it worked");
});
});
型号
public class VisualizationModels
{
public String StateID { get; set; }
}
生成局部视图的控制器
public ActionResult StateData(string stateID)
{
VisualizationModels vm = new VisualizationModels();
vm.StateID = stateID;
return PartialView("_SpecificStateData", vm);
}
更新
奇怪的是,如果我使用 $.get
而不是 @Url.Action
,我实际上会点击控制器操作,只是出于某种原因现在不会渲染局部视图...
//Load partial view when an admin changes the state selection
$('#stateList').change(function () {
var selection = $(this).val();
var url = '/Visualizations/StateData?StateID=' + selection;
$.get(url, function (data) {
$('#partialPlaceHolder').html(data);
});
你不能用这样的东西吗
var url = '@Url.Action("StateData", "Visualizations", new { StateID = selection})'
而不是
var url = '@Url.Action("StateData", "Visualizations")' + '?StateID=' + selection;
并检查这是否有效。因为如果您的参数无法正确传递。您的路由处理程序将无法映射正确的操作方法。
我想通了...这是最愚蠢、最讨厌的小问题。在我的主视图中(在我原来的 post 的顶部)我输入了 div
的 id
错误...
错误:
<div id="#partialPlaceHolder"></div>
右:
<div id="partialPlaceHolder"></div>
现在一切正常。最终 JS 看起来像这样:
//Load partial view when an admin changes the state selection
$('#stateList').change(function () {
var selection = $(this).val();
var url = '@Url.Action("StateData", "Visualizations", new { StateID = "_state" })'.replace("_state", selection);
$("#partialPlaceHolder").load(url, function () {
console.log("it worked");
});
});