按钮上的模型为null单击ASP.NET MVC 5

时间:2015-06-09 19:12:57

标签: c# jquery asp.net ajax asp.net-mvc

我使用ajax将部分视图加载到视图中。局部视图中有一个下拉列表,但只要我选择一个下拉选项并单击局部视图中的一个按钮进行连接,我就会得到一个模型为null的错误。这很奇怪,因为模型已经填充了下拉列表,它不会在断点上对我的控制器进行任何操作。我花了好几天时间。

错误是:

  

发生了'System.NullReferenceException'类型的异常   App_Web_m2cylvfu.dll但未在用户代码中处理   information:对象引用未设置为对象的实例。

HTML

application/json

JAVASCRIPT

<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>

控制器

$(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));
        });
      }
    });

  });

}

2 个答案:

答案 0 :(得分:0)

我发现了这个问题。在部分视图中没有调用javascript,它直接转到控制器操作并返回而不重新加载viewbag数据。

答案 1 :(得分:0)

  

它没有击中控制器,因为你有一些错误   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));
        });
      }
    });

  });
}