从文本框中获取数据以传递给控制器​​,而无需刷新MVC

时间:2017-06-02 16:12:26

标签: javascript c# html asp.net-mvc

现在,在我的页面上,我在其中一个视图<button type="button" id="show">Find Project</button>的顶部有一个按钮,当按下该按钮时,会在页面底部呈现部分视图(这是一个表格)。我的布局格式为:

<body>
    <div class="navbar navbar-inverse navbar-fixed-top">
        <!--this is my navbar-->
    </div>
    <div class="container body-content">
        @RenderBody()
    </div>

    <div class="wrapper">
        <!-- TABLE WILL APPEAR HERE -->
    </div>
</body>

使表格显示的javascript是:

$(document).ready(function() {
    $("#show").on("click", function() {
        $.ajax({
            url: '/Projects/SearchTable',
            type: "GET"
        }).done(function(partialViewResult) {
            $(".wrapper").html(partialViewResult);
            $(".wrapper").css('display', 'block');
        });
    });
});

/Projects/SearchTable是呈现局部视图的控制器操作:

[HttpGet]
public ActionResult SearchTable()
{
    var states = GetAllStates();
    var model = new ProjectClearanceApp.Models.ProjectViewModel();

    model.States = GetSelectListItems(states);
    model.Projects = from m in db.Projects select m;

    return PartialView("~/Views/Projects/_ClearedProjects.cshtml", model);
}

文本框分散在我的主视图中,并且所有文本框都以相同的格式显示:

<div class="col-md-5 entry-field">
    @Html.LabelFor(model => model.Project.FirstNamedInsured, htmlAttributes: new { @class = "control-label" })
    @Html.TextBoxFor(model => model.Project.FirstNamedInsured, new { @class = "form-control text-box single-line", maxlength=150 })
    @Html.ValidationMessageFor(model => model.Project.FirstNamedInsured, "", new { @class = "text-danger" })
</div>

除了两个格式如下的下拉列表外:

 <div class="col-md-3 address-info">
     @Html.LabelFor(m => m.Project.FirstNamedInsuredAddress.State, htmlAttributes: new { @class = "address-label" })
     @Html.DropDownListFor(m => m.Project.FirstNamedInsuredAddress.State,
                           Model.States,
                           "--",
                           new { @class = "form-control address-entry" })
    @Html.ValidationMessageFor(model => model.Project.FirstNamedInsuredAddress.State, "", new { @class = "text-danger" })
</div>

其中Model.States是一个可枚举的,用于填充所有状态的下拉列表。

是否可以从这些文本框中获取数据并将它们作为数据/参数传递给控制器​​,以便在部分视图中使用而无需提交表单或刷新页面?

1 个答案:

答案 0 :(得分:2)

发送如下参数:

        public ActionResult SearchTable(string firstNamedInsured)
        {
            //Use the parameter in the model or any where
            var states = GetAllStates();
            var model = new ProjectClearanceApp.Models.ProjectViewModel();

            model.States = GetSelectListItems(states);
            model.Projects = from m in db.Projects select m;

            return PartialView("~/Views/Projects/_ClearedProjects.cshtml", model);
        }

和javascript:

$(document).ready(function () {
        $("#show").on("click", function () {
            $.ajax({
                url: '/Projects/SearchTable?firstNamedInsured=' + $('#' + @Html.IdFor(m => m.Project.FirstNamedInsured)).val(),
                type: "GET"
            }).done(function (partialViewResult) {
                $(".wrapper").html(partialViewResult);
                $(".wrapper").css('display', 'block');
                });
        });
    });