【问题标题】:Model is null on button click ASP.NET MVC 5模型在按钮单击 ASP.NET MVC 5 时为空
【发布时间】: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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-17
      • 2015-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多