【问题标题】:Why is my web grid only binding my data on my Index action function? C# MVC为什么我的网络网格只将我的数据绑定到我的索引操作函数上? C#MVC
【发布时间】:2015-10-07 17:26:40
【问题描述】:

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

我希望我的默认 Index() ActionResult 只返回网页而不进行任何特殊渲染。我希望我的 GetPatientOneSearch() ActionResult 返回我尝试绑定的 PatientList 并显示我的网络网格。

如前所述,如果我在 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");
            }*/
        });

【问题讨论】:

  • 这是哪个视图?索引还是 PatientMerge?
  • @howcheng View is PatientMerge.cshtml
  • @Smak 你得到答案了吗?我遇到了同样的问题
  • @iamCR 自从我访问这个问题以来已经有一段时间了,但我相信我在一个单独的问题中更详细地重新发布了这个问题。我记得问题本身,但我不知道我是如何解决的。下面的链接是我唯一的历史记录:stackoverflow.com/questions/31620038/…

标签: c# asp.net-mvc razor webgrid


【解决方案1】:

所以您的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>

【讨论】:

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