【问题标题】:Calling model variations using POST in mvc [duplicate]在 mvc 中使用 POST 调用模型变体 [重复]
【发布时间】:2020-08-30 11:29:52
【问题描述】:

编辑:我浏览了 StackOverflow 和各种网站上发布的许多解决方案,然后提出了下面的编译解决方案。随着初始查询的解决,我还更改了问题的标题。

我正在构建一个 Web 应用程序,其目标是根据主视图中的下拉列表更新模型,并在部分视图中显示模型中的数据表。为了更清晰地描绘场景,我在下面发布代码:

型号代码

public class Reports
    {
        public DataTable dt2 { get; set; }
        public void setdt2defvalue()
        {
            Relativity.API.IDBContext eddsDBContext = Relativity.CustomPages.ConnectionHelper.Helper().GetDBContext(-1);
            string defaultvalue = "Select '' as [Test]";
            dt2 = eddsDBContext.ExecuteSqlStatementAsDataTable(defaultvalue);
        }

引用的 DBcontext 用于第三方应用程序

控制器代码

[HttpPost]
        public ActionResult ReviewerDashboardModel(int reviewerid)
        {
            Reports rev = new Reports();

            try
            {

                Relativity.API.IDBContext eddsDBContext = Relativity.CustomPages.ConnectionHelper.Helper().GetDBContext(-1);

                String sqlrev = "Select '" + reviewerid + "' as [Test]";
                rev.dt2 = eddsDBContext.ExecuteSqlStatementAsDataTable(sqlrev);

            }
            catch (Exception ex)
            {

            }

            return PartialView(rev);

        }

        public ActionResult Index4()
        {
            return View();
        }

主视图 (Index4.cshtml)


@model Reports
@using System.Data
@using ReviewerTest.Models;
@{
    Layout = null;
}

<!DOCTYPE html>

<html lang="en">

<body>
    <div class="container">
        <div class="col-md-6 col-md-offset-3">


            <select id="reviewer">
                <option value="1">option1</option>
                <option value="2">option2</option>
                <option value="3">option3</option>
            </select>

            <div style="margin-top:50px">
                Result:
                <div id="partialplaceholder">
                    @Html.Partial("ReviewerDashboardModel")
                </div>
            </div>
        </div>
    </div>

    <script type="text/javascript">
        $(function() {
            $('#reviewer').change(function () {
                var url = "@Url.Action("ReviewerDashboardModel")";
                var reviewerid = $(this).val();
                if (reviewerid) {
                    reviewerid = reviewerid;
                }
                else {
                    reviewerid = 1;
                }
                 $.post(url, { reviewerid: reviewerid }, function (data) {
                    $("#partialplaceholder").html(data);
                 });
             });
        });

    </script>

    <!-- JS includes -->
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <script src="//netdna.bootstrapcdn.com/bootstrap/3.1.1/js/bootstrap.min.js"></script>

    <script src="//ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.min.js"></script>
    <script src="//ajax.aspnetcdn.com/ajax/mvc/4.0/jquery.validate.unobtrusive.min.js"></script>

</body>
</html>

部分视图(ReviewerDashboardModel.cshtml)

@model Reports
@using ReviewerTest.Models;
@using System.Data

    <div class=" row">
        if (Model.dt2 != null)
        @{
            <table id="ReviewerView" style="margin-left:13px; margin-right:13px; overflow-y:auto">
                <thead style="background-color:lightgrey">
                    <tr>


                        @foreach (System.Data.DataColumn col in Model.dt2.Columns)
                        {
                            <th>@col.Caption</th>
                        }
                    </tr>
                </thead>
                <tbody>
                    @foreach (System.Data.DataRow row in Model.dt2.Rows)
                    {
                        <tr>
                            @foreach (var cell in row.ItemArray)
                            {
                                if (cell != null)
                                {
                                    <td>@cell.ToString()</td>
                                }
                                else
                                {
                                    <td></td>
                                }
                            }
                        </tr>
                    }
                </tbody>
            </table>

        }
        else
        {
            <table style="margin-left:13px; margin-right:13px; overflow-y:auto">
                <tr>
                    <th>Revier Name</th>
                </tr>
                <tr>
                    <td>Select the reviewer from the dropdown</td>
                </tr>
            </table>
        }
    </div>

首先,对于在这里轰炸过多的代码,我深表歉意,但我希望它具有过度包容性,以便我可以消除其中的所有故障点。

此应用程序的主要目的是返回一个包含数据表的模型,并且数据表应根据用户在主视图下拉菜单中的选择进行更新。我正在使用局部视图来显示该表。

我目前面临的错误是部分视图给我一个错误说明

System.NullReferenceException:对象引用未设置为对象的实例。

局部视图中的这一行

if (Model.dt2 != null)

我真的很困惑,因为如果数据表是否为空,这正是条件应该评估的内容。我无法解决这个问题,并且非常感谢任何形式的帮助。另外,欢迎对代码提出任何建议,因为我是 .net 开发领域的初学者。

注意:我还尝试在 ajax 查询中使用 get 运算符而不是 post 运算符来测试它。使用 get,没有遇到此错误,并且正在显示局部视图的 else 部分。

【问题讨论】:

  • 如果您在该行得到它,那么 Model 就是 null(您无法访问属性 - dt2 - null 对象)。
  • 这是 C# stackoverflow 上最常见的问题:What is a NullReferenceException, and how do I fix it?
  • @John 非常感谢,这对我解决空异常错误很有帮助。我现在面临电话后问题,因为视图没有在下拉更改时更新。非常感谢您在这方面的任何帮助。

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


【解决方案1】:

首先,要修复NullReferenceException,您应该在if 条件中再添加一段代码:

if (Model != null && Model.dt2 != null)

然后,您可能需要去控制器类检查为什么 Model 为空。只有在你修复它之后,你才能正确运行页面。

【讨论】:

    猜你喜欢
    • 2020-10-12
    • 2012-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-04
    • 2021-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多