是否可以从不是索引的Controller方法返回视图?

时间:2015-07-20 21:39:00

标签: c# asp.net-mvc

我目前正在开始使用MVC,但如果我不使用,我似乎无法用我的控制器操纵我的视图...

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

当我使用不是Index()的函数尝试更新时,似乎页面根本没有变化。事实上,似乎页面步入所有预期的控制器和部分视图调用,但然后只是加载默认页面。我认为我在如何与我的观点进行沟通时做错了。

这是我目前的流程:

使用控件创建视图。我希望我的用户输入搜索数据,单击搜索按钮,然后开始查询以检索结果。一旦检索到结果,结果将显示在网格中。

    <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" type="submit" onclick="patientOneSearch()"
                    title="Search">
                Search
            </button>
        </fieldset>
        @if (Model != null && Model.Count() > 0)
        {
            Html.RenderPartial("PatientOneSearch");
        }
    </div>

我的模特:

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; }
    }
}

我的AJAX到我的控制器查询:

        public PartialViewResult GetPatientOneSearch(string fname, string lname, string dob)
        {
            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 PartialView("PatientOneSearch", patientList);
            }
            catch (Exception ex)
            {
                Logger.Log.Error(ex.Message + ex.StackTrace + ex.InnerException);
                //return Json(new { error = ex.Message }, JsonRequestBehavior.AllowGet);
                return PartialView("PatientOneSearch", null);
            }
        }

然后转到我的部分视图......

@model IEnumerable<myNameSpace.Repository.Model.PatientMerge>

<div id="grdPatientOneSearch">
    @if (Model != null && Model.Count() > 0)
    {
        var grid = new WebGrid(Model);
        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")
        )
        );
    }
    else
    {
        <label>No records found.</label>
    }

Aaaaa并且我的浏览器中没有显示任何内容。事实上,通过我所做的所有测试,我发誓它只返回默认视图。它实际上没有命中我的返回View();以上,但是在过去两天我试图做的所有测试中,我发誓必须要发​​生的事情。

我是否在更新观点方面做错了什么?

3 个答案:

答案 0 :(得分:1)

我建议你用mvc获得更多知识,但你可以从你的控制器做任何事情。使用控制器代码

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

这只是控制器在您查找索引视图时运行的操作。如果您想点击 blah 视图,可以将其写为:

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

如果您希望索引操作带您进入视图,那么它也可以执行此操作

public ActionResult Index() {
    //Do some code and grab MyModel 
    return View("Blah", MyModel);
}

每当调用索引操作时,它就会点击 Blah 视图,因为它不会只是告诉它返回 View()< / strong>(只返回与动作结果同名的视图),告诉它返回不同的视图和模型。

你也可能有像

这样的东西
public ActionResult Index() { 
    return RedirectToAction("Blah")
}

将重定向到 Blah 操作结果

答案 1 :(得分:1)

我只是为这个问题做出第二个答案为什么不把你的html设置为

<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" type="submit" onclick="patientOneSearch()"
                title="Search">
            Search
        </button>
    </fieldset>
    @if (Model != null && Model.Count() > 0)
    {
        <div id="patientSearchPartial">

        </div>
    }
</div>

然后在你的JS代码中

GetAjax('PatientMerge/GetPatientOneSearch', 'json', { 'fname': fname, 'lname': lname, 'dob': dob }, function (data) { 
    $('#patientSearchPartial').html(data);  
} )

因为您的部分视图Action Result返回html,为什么不使用jquery来填充返回html的div 现在它将点击您的局部视图并使用控制器

中的数据重新填充html

答案 2 :(得分:0)

我最终采用了代码理论的方法。真的,我能够通过这个讨论更好地形成我的问题,并找到我需要的资源来掌握部分视图的呈现方式。

$.post(url, { 'fname': fname, 'lname': lname, 'dob': dob, patientNumber: 1 })
        .done(function (response) {
            $("#grdPatientTwoSearch").html(response);
        });

部分视图将调用您的控制器(必须从SCRIPT调用),控制器将HTML返回到您的脚本。然后,您需要将响应绑定到网页,类似于我上面所做的。

我用这个资源来帮助自己理解:

https://www.simple-talk.com/dotnet/asp.net/revisiting-partial-view-rendering-in-asp.net-mvc/