为什么我的网络网格只绑定我的数据对我的索引行动功能?c# MVC

本文关键字:我的 功能 MVC 索引 网格 网络 绑定 数据 为什么 | 更新日期: 2023-09-27 18:03:29

通过实验,我发现我在Index(默认)ActionResult函数中执行的相同代码块将绑定数据到我的web网格,但是如果我交换此代码并尝试通过我编写的自定义操作函数返回到我的视图,网格不会显示在我的渲染视图上。

我想我的默认索引()ActionResult返回只是没有任何特殊渲染的网页。我希望我的GetPatientOneSearch() ActionResult返回我试图绑定的patientList并显示我的web网格。

如前所述,如果我剪切并粘贴GetPatientOneSearch中的代码并将其放入Index()中,我将获得搜索结果。我不知道为什么会发生这种情况,但这可能是关于MVC我不理解的事情。

视图:

@model IEnumerable<myNameSpace.Repository.Model.PatientMerge>
@{
    ViewBag.Title = "myNameSpace";
}
@Scripts.Render(myNameSpace.Web.App.BundleConfig.GetVirtualPathForScript(myNameSpace.Web.App.BundleConfig.Scripts.PatientMerge))
@using System.Web.Helpers;
<div id="">
    <h2>
        Patient Merge
    </h2>
    <div class="container">
        <div class="searchOneWrp">
            <fieldset>
                <legend><strong>Patient One Search</strong></legend>
                First Name: <input type="text" id="fnamePone" />
                Last Name: <input type="text" id="lnamePone" />
                D.O.B.: <input type="text" id="dobPOne" />
                <button class="patient_look_up_button" id="btnPOneSearch" name="btnPOneSearch" onclick="patientOneSearch()"
                        title="Search">
                    Search
                </button>
            </fieldset>
            <div id="grdPatientOneSearch">
                @{
                    if (ViewBag.Message != "Index")
                    {
                        var grid = new WebGrid(Model, canPage: true, rowsPerPage: 15, selectionFieldName: "selectedRow", ajaxUpdateContainerId: "grdPatientOneSearch");
                        //grid.Bind(rowCount: 1, source: Model, autoSortAndPage: false);
                        grid.Pager(WebGridPagerModes.NextPrevious);
                        grid.GetHtml(tableStyle: "webgrid",
                        headerStyle: "header",
                        alternatingRowStyle: "alt",
                        selectedRowStyle: "select",
                        columns: grid.Columns(
                        grid.Column("pat_id", "Id"),
                        grid.Column("fname", "First Name"),
                        grid.Column("lname", "Last Name"),
                        grid.Column("birth_date", "dob")
                        ));
                    }
                }
            </div>
        </div>
        <div class="searchTwoWrp">
            <fieldset>
                <legend><strong>Patient Two Search</strong></legend>
                First Name: <input type="text" id="fnamePTwo" />
                Last Name: <input type="text" id="lnamePTwo" />
                D.O.B.: <input type="text" id="dobPTwo" />
                <button class="patient_look_up_button" id="btnPTwoSearch" name="btnPTwoSearch"
                        title="Search">
                    Search
                </button>
            </fieldset>
        </div>
    </div>
</div>

控制器:

using myNameSpace.Repository;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace myNameSpace.Web.App.Controllers.Patient
{
    public class PatientMergeController : Controller
    {
        //
        // GET: /PatientMerge/
        public ActionResult Index()
        {
            ViewBag.Message = "Index";
            //List<myNameSpace.Repository.Model.PatientMerge> patientList = new List<myNameSpace.Repository.Model.PatientMerge>();
            return View();
        }
        #region Search Function
        public ActionResult GetPatientOneSearch(string fname, string lname, string dob)
        {
            ViewBag.Message = "";
            try
            {
                var target = new PatientRepository();
                var result = target.GetPatient(fname, lname, dob, "", "", "");
                List<myNameSpace.Repository.Model.PatientMerge> patientList = new List<myNameSpace.Repository.Model.PatientMerge>();
                for (int i = 0; i < result.Count; i++)
                {
                    myNameSpace.Repository.Model.PatientMerge patient = new myNameSpace.Repository.Model.PatientMerge();
                    patient.pat_id = result[i].PatientId;
                    patient.fname = result[i].FirstName;
                    patient.lname = result[i].LastName;
                    patient.birth_date = result[i].DateOfBirth.ToString();
                    patientList.Add(patient);
                }
                return View("~/Views/PatientMerge", patientList);
            }
            catch (Exception ex)
            {
                Logger.Log.Error(ex.Message + ex.StackTrace + ex.InnerException);
                //return Json(new { error = ex.Message }, JsonRequestBehavior.AllowGet);
                return View();
            }
        }
        #endregion
    }
}

模型:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
namespace myNameSpace.Repository.Model
{
    public class PatientMerge
    {
        public int pat_id { get; set; }
        public string pag_status_cn { get; set; }
        public string fname { get; set; }
        public string lname { get; set; }
        public string birth_date { get; set; }
        public string AgeYears { get; set; }
        public string gender_cd { get; set; }
        public string phone_no { get; set; }
        public string addr1 { get; set; }
        public string addr2 { get; set; }
        public string city { get; set; }
        public string state_cd { get; set; }
    }
}

JS调用控制器方法:

GetAjax('PatientMerge/GetPatientOneSearch', 'json', { 'fname': fname, 'lname': lname, 'dob': dob }, function (data) {
            /*if (!data.success) {
                customAlert("623", "Error");
            }*/
        });

为什么我的网络网格只绑定我的数据对我的索引行动功能?c# MVC

那么您的patientOneSearch()函数对GetPatientOneSearch控制器动作进行Ajax调用,对吗?那会返回一个视图,它将是一个HTML流。在我看来,您实际上是在寻找JSON数据。更简单的方法是对该操作使用表单POST或GET(如果您希望用户能够直接链接到搜索结果,请使用GET)。

<fieldset>
  <legend><strong>Patient One Search</strong></legend>
  <form method="GET" action="GetPatientOneSearch">
    First Name: <input type="text" id="fname" />
    Last Name: <input type="text" id="lname" />
    D.O.B.: <input type="text" id="dob" />
    <button class="patient_look_up_button" id="btnPOneSearch" name="btnPOneSearch" type="submit" title="Search">
      Search
    </button>
  </form>
</fieldset>