【发布时间】:2015-08-24 18:58:58
【问题描述】:
我使用 ajax 将部分视图加载到视图中。局部视图中有一个下拉列表,但是每当我选择一个下拉选项并单击局部视图中的按钮进行连接时,我都会收到模型为空的错误。这很奇怪,因为模型已经填充了下拉菜单,并且它不会在我的控制器上的断点上执行任何操作。我为此花了几天时间。
错误是:
“System.NullReferenceException”类型的异常发生在 App_Web_m2cylvfu.dll 但未在用户代码中处理 附加 信息:对象引用未设置为对象的实例。
HTML
<div>
<fieldset>
<div>
@Html.LabelFor(m => m.ServerName)
</div>
<div>
@Html.DropDownListFor(model => model.ServerName, Model.ServerNames, "-- Select Server --")
</div>
<div>
<input id="btnConnect" type="submit" name="Connect" value="Connect" />
</div>
</fieldset>
</div>
JAVASCRIPT
$(document).ready(function() {
$('#btnConnect').click(function(evt) {
evt.preventDefault();
evt.stopPropagation();
var selectedServerName = $('#ServerName').val()
$.ajax({
url: '@Url.Action("ConnectToServer", "Settings")',
data: {
'servername': selectedServerName
},
cache: false,
type: 'post',
datatype: 'json',
success: function(result) {
var $el = $("#DatabaseName");
$el.empty(); // remove old options
$el.append($("<option></option>").attr("value", '').text('Please Select'));
$.each(result, function(value, key) {
$el.append($("<option></option>").attr("value", value).text(key));
});
}
});
});
}
控制器
public PartialViewResult Index() {
var afConnectionModel = new AFConnectionModel() {
ServerNames = GetServers()
};
return PartialView(afConnectionModel);
}
[HttpPost]
public JsonResult ConnectToServer(string servername) {
return Json(new {
foo = "bar", baz = "Blech"
});
}
private static dynamic GetServers() {
var piSystems = new PISystems().Select(c => new Afart {
Id = c.Name, ServerName = c.Name
});
return new SelectList(piSystems, "Id", "ServerName");
}
public class Afart
{
public string Id { get; set; }
public string ServerName { get; set; }
}
【问题讨论】:
-
您是否尝试过单步执行代码以查明位置和原因
-
它在剃刀代码中抛出异常:Model.ServerNames。如果我知道为什么,我就不会问这个问题了。 :-)
-
您是否使用 LINQ 查询将 PISystems() 投影到... Afart?
-
那么 ServerNames 是什么样子的......
-
我已经为 ServerNames 添加了类。是的,我正在使用 LINQ 投影到 Afart。我应该提到下拉列表已正确填充,我可以从下拉列表中进行选择。只有当我单击“连接”时才会收到错误消息。
标签: c# jquery asp.net ajax asp.net-mvc