【问题标题】:ajax post does not return view dataajax post 不返回视图数据
【发布时间】:2020-09-23 11:55:16
【问题描述】:

我正在使用 ajax post 来调用控制器方法DeviceData()。它不返回视图数据。
当我尝试调试代码时,在 controller.cs 和 .cshtml 中都将值分配给viewBag,但浏览器不显示任何数据。代码不返回任何错误。 ajax 调用后只显示patientDDL。

我需要显示我在viewBag 中分配的“设备名称日期等”。

这是我的代码:

DeviceData.cshtml

@model Hospital.Models.DeviceModel
<div class="row">
  <div class="col-md-12">
    <div id="pdf" class="pull-left">
      <table>
        <tr>
          <td class="blue-bgcolor">Patient List : </td>
          <td>
            @Html.DropDownList("FromJson", new SelectList(Enumerable.Empty <SelectListItem>()),"select", 
                    new { Class = "form-control", onchange = "SelectedIndexChanged()" })
          </td>
        </tr>
      </table>
    </div>
  </div>
</div>
<div class="row">
  <table class="table valign-middle">
    <tbody>
      <tr>
        <td>Device Name</td>
        <td>@ViewBag.deviceName</td>
      </tr>
      <tr>
        <td>DateTime</td>
        <td>@ViewBag.date</td>
      </tr>
      <tr>
        <td>SPO2</td>
        <td>@ViewBag.spo2</td>
      </tr>
      <tr>
        <td>PR</td>
        <td>@ViewBag.pr</td>
      </tr>
    </tbody>
  </table>
</div>
<script type="text/javascript">
  $(document).ready(function() {
    $.ajax({
        url: "PatinetDDl",
        type: "GET",
        contentType: "application/json; charset=utf-8",
        datatype: JSON,
        success: function(result) {
            $(result).each(function() {
                $("#FromJson").append($("<option></option>").val(this.Value).html(this.Text));
            });
        },
        error: function(data) {}
    });
  });
</script>
<script type="text/javascript">
  function SelectedIndexChanged() {
      var pid = $("#FromJson").val();
      alert(pid);
      $.ajax({
          url: '/Data/DeviceData',
          type: 'POST',
          datatype: 'json',
          //contentType: 'application/json',
          data: { pid: +pid },
          success: function (result) { },
          error: function () { alert("Whooaaa! Something went wrong..") },
    });
  }
</script>

Datacontroller.cs

public JsonResult PatinetDDl()
{
    Common.DBConnect.fnconchk(con);
    DataTable dtpatient = new DataTable();
    string query = "";
    query = "select Preg_id,P_Name from Patient_Reg";
    SqlCommand cmd2 = new SqlCommand(query, con);
    SqlDataAdapter da = new SqlDataAdapter(cmd2);
    da.Fill(dtpatient);

    List<SelectListItem> ObjList = new List<SelectListItem>();

    foreach (DataRow row in dtpatient.Rows)
    {
        ObjList.Add(new SelectListItem()
        {
            Text = row["P_Name"].ToString(),
            Value = row["Preg_id"].ToString()
        });
    }
    var jsonData = ObjList;
    return Json(jsonData, JsonRequestBehavior.AllowGet);
}


[HttpGet]
public ActionResult DeviceData()
{
    DeviceModel obj = new DeviceModel();
    return View(obj);
}

[HttpPost]
public ActionResult DeviceData(string pid)
{
    DeviceModel obj = new DeviceModel();
    DataTable dt = new DataTable();
    Common.DBConnect.fnconchk(con);
    if (pid != null)
    {
        string query = "";
        query = " select D_Name,Date_Time,D_Value1 from readings where pid='" + pid;
        SqlCommand cmd2 = new SqlCommand(query, con);
        SqlDataAdapter da = new SqlDataAdapter(cmd2);
        da.Fill(dt);
        ViewBag.deviceName = dt.Rows[0]["D_Name"].ToString();
        ViewBag.date = dt.Rows[0]["Date_Time"].ToString();
        ViewBag.spo2 = dt.Rows[0]["D_Value1"].ToString();
        ViewBag.pr = dt.Rows[0]["D_Value2"].ToString();
    }
    return View(obj);
}

【问题讨论】:

  • 在 PatientDDL 中,您返回 json,在 DeviceData 中,您希望返回一个视图,因此 ajax 调用数据类型略有变化:'html' 将 json 转换为 html 以获取 html 响应
  • @Shahrukh Khan 我试过了。没用

标签: c# ajax asp.net-mvc


【解决方案1】:

你想改变很多东西以获得期望的输出。

第一

制作局部视图名称_deviceInfo.cshtml

<table class="table valign-middle">
    <tbody>
      <tr>
        <td>Device Name</td>
        <td>@ViewBag.deviceName</td>
      </tr>
      <tr>
        <td>DateTime</td>
        <td>@ViewBag.date</td>
      </tr>
      <tr>
        <td>SPO2</td>
        <td>@ViewBag.spo2</td>
      </tr>
      <tr>
        <td>PR</td>
        <td>@ViewBag.pr</td>
      </tr>
    </tbody>
  </table>

第二

更改控制器操作方法

[HttpPost]
public PartialViewResult DeviceData(string pid)
{
    DeviceModel obj = new DeviceModel();
    DataTable dt = new DataTable();
    Common.DBConnect.fnconchk(con);
    if (pid != null)
    {
        string query = "";
        query = " select D_Name,Date_Time,D_Value1 from readings where pid='" + pid;
        SqlCommand cmd2 = new SqlCommand(query, con);
        SqlDataAdapter da = new SqlDataAdapter(cmd2);
        da.Fill(dt);
        ViewBag.deviceName = dt.Rows[0]["D_Name"].ToString();
        ViewBag.date = dt.Rows[0]["Date_Time"].ToString();
        ViewBag.spo2 = dt.Rows[0]["D_Value1"].ToString();
        ViewBag.pr = dt.Rows[0]["D_Value2"].ToString();
    }
    return PartialView(obj);
}

第三

DeviceData.cshtml

中的Ajax方法
@model Hospital.Models.DeviceModel
<div class="row">
  <div class="col-md-12">
    <div id="pdf" class="pull-left">
      <table>
        <tr>
          <td class="blue-bgcolor">Patient List : </td>
          <td>
            @Html.DropDownList("FromJson", new SelectList(Enumerable.Empty <SelectListItem>()),"select", 
                    new { Class = "form-control", onchange = "SelectedIndexChanged()" })
          </td>
        </tr>
      </table>
    </div>
  </div>
</div>
<div class="row" id="device-data">
  
</div>
<script type="text/javascript">
  $(document).ready(function() {
    $.ajax({
        url: "PatinetDDl",
        type: "GET",
        contentType: "application/json; charset=utf-8",
        datatype: JSON,
        success: function(result) {
            $(result).each(function() {
                $("#FromJson").append($("<option></option>").val(this.Value).html(this.Text));
            });
        },
        error: function(data) {}
    });
  });
</script>
<script type="text/javascript">
  function SelectedIndexChanged() {
      var pid = $("#FromJson").val();
      alert(pid);
      $.ajax({
          url: '/Data/DeviceData',
          type: 'POST',
          datatype: 'html',
          //contentType: 'application/json',
          data: { pid: +pid },
          success: function (result) {
$('#device-data').html(result);
 },
          error: function () { alert("Whooaaa! Something went wrong..") },
    });
  }
</script>

希望它对你有用:)

【讨论】:

    【解决方案2】:

    问题是您通过操作结果 (html) 返回视图,但您在第二个 ajax 脚本中使用了数据类型 json。 像这样编辑 SelectedIndexChanged:

    function SelectedIndexChanged() {
          var pid = $("#FromJson").val();
          alert(pid);
          $.ajax({
              url: '/Data/DeviceData',
              type: 'POST',
              datatype: 'html',
              //contentType: 'application/json',
              data: { pid: +pid },
              success: function (data) { 
                $('#placeHolder').html(data);
              },
              error: function () { alert("Whooaaa! Something went wrong..") },
        });
      }
    

    不要忘记在要显示 DeviceData 的任何位置添加 placeHolder 元素:

    <div id="#placeHolder"></div>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-15
      相关资源
      最近更新 更多