【问题标题】:why i got error "Object reference not set to an instance of an object" with session parameter and its not null?为什么我收到错误“对象引用未设置为对象的实例”,会话参数不为空?
【发布时间】:2020-03-30 02:44:06
【问题描述】:

我是 mvc 新手,我想构建新系统,我制作了登录屏幕并将登录信息保存在 Session 参数中,然后重定向到另一个窗口,

当我使用 SELECT 语句而不比较会话值时,它的工作没有任何错误,这是控制器代码:

public ActionResult Index()
        {
            string sql= @"SELECT PATIENT_NO , LAB_ORDER_NO , PATIENT_NAME_A , SERV_REQUEST_DATE_G , 
                               SERV_REQUEST_DOCTOR_NAME 
                             FROM LAB_ORDERS_STS where  PATIENT_NO=10  ";


            DataTable dt = func.fireDatatable(string.Format(sql));
            return View(dt);

        }

但是当我使用会话并根据会话获取数据时[“MRN”]我收到错误 “对象引用未设置为对象的实例”,这是代码:

public ActionResult Index()
        {
            string sql= @"SELECT PATIENT_NO , LAB_ORDER_NO , PATIENT_NAME_A , SERV_REQUEST_DATE_G , 
                               SERV_REQUEST_DOCTOR_NAME 
                             FROM LAB_ORDERS_STS where 1=1 ";

           string condition = "";
            string orderby = "LAB_ORDERS_STS.LAB_ORDER_NO desc";
            condition += " and LAB_ORDERS_STS.PATIENT_NO ='" + Session["MRN"] + "'";


            DataTable dt = func.fireDatatable(string.Format(sql+condition+orderby));
            return View(dt);

        } 

这也是登录控制器代码:

[HttpPost]
        public ActionResult Authorise(kaashtaif.Models.WEBSITE_USERS usermodel)
        {
            using (Entities db = new Entities())
            {
                var userdetails = db.WEBSITE_USERS.Where(x => x.ID_NO == usermodel.ID_NO && x.MOBILE == usermodel.MOBILE && x.PATIENT_NO == usermodel.PATIENT_NO).FirstOrDefault();
                if (userdetails == null)
                {
                    usermodel.LoginErrorMessage = "Entered Data Not Exist Please Update your Data - البيانات المدخلة غير صحيحة ارجو تحديث بيانات الملف الطبي";
                    return View("Login", usermodel);
                }
                else
                {
                    Session["IDNO"] = usermodel.ID_NO;
                    Session["MOBILE"] = usermodel.MOBILE;
                    Session["MRN"] = usermodel.PATIENT_NO;
                    return RedirectToAction("Index", "Result");
                }
            }

        }

我调试的代码和会话参数保存值而不是空值。

这是 Index.cshtml 代码:

@model System.Data.DataTable

@{
    ViewBag.Title = "Index";
}

<h2>نتائج تحاليل المختبر </h2>

<table class="table">
    <tr>
        <th> PATIENT NO </th>
        <th>
            ORDER NO
        </th>
        <th>
            PATIENT NAME
        </th>
        <th>
            REQUEST DATE
        </th>
        <th>
            DOCTOR NAME
        </th>
    </tr>

    @foreach (System.Data.DataRow dr in Model.Rows)
    {
        <tr>
            <td>@dr["PATIENT_NO"].ToString()</td>
            <td>@dr["LAB_ORDER_NO"].ToString()</td>
            <td>@dr["PATIENT_NAME_A"].ToString()</td>
            <td>@dr["SERV_REQUEST_DATE_G"].ToString()</td>
            <td>@dr["SERV_REQUEST_DOCTOR_NAME"].ToString()</td>
            <td>@Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) </td>
        </tr>
    }

</table>
<p>
    @Html.ActionLink("Edit", "Edit", new { /* id = Model.PrimaryKey */ }) |
    @Html.ActionLink("Back to List", "Index")
</p>

最后,错误出现在这一行 foreach 循环中,当我使用 Session["MRN"] 但是当我直接选择没有会话参数的数据时,它的工作,错误是什么? 我也检查了网站上的帖子,但没有解决我的问题。

@foreach (System.Data.DataRow dr in Model.Rows)

【问题讨论】:

  • 您是否检查过dt.Rows 是否包含行?
  • @Sajid no 如何检查 dt.rows 我需要调试哪些代码?
  • 我想,我正在寻找问题,如果它有效,你会在 string orderby = "LAB_ORDERS_STS.LAB_ORDER_NO desc"; 中错过 order by
  • @Sajid 非常感谢它让我发疯的问题,但有时你会错过一些小问题,我无法将其添加为答案 :)

标签: asp.net-mvc entity-framework


【解决方案1】:

您错过了string orderby = "LAB_ORDERS_STS.LAB_ORDER_NO desc"; 中的Order by 要解决问题,请将orderby 更改为:

string orderby = " Order by LAB_ORDERS_STS.LAB_ORDER_NO desc";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 1970-01-01
    相关资源
    最近更新 更多