【问题标题】:Put a view inside other view after getting value from first view从第一个视图获得价值后,将一个视图放在另一个视图中
【发布时间】:2015-09-26 12:35:27
【问题描述】:

我是 MVC 的新手。我有一个名为 Index 的操作,它填充一个选择列表并将其传递给视图。然后我有一个 httpost 函数 GetBaseline() 作为 RedirectToRouteResult 从 Index.vbhtml 中获取值并将其传递给 StatusList() 以显示一个表。

这是我的 StatusAreaController:

Function Index() As ActionResult            
        Dim l_SubmitBaselineSelectLists As New FCSWebMVC.Models.SubmitBaselineSelectLists
        With l_SubmitBaselineSelectLists
            .m_SelectListBaseline = m_BaselineRepository.BaselineSelectList()  'Pass the baselines obtained from the model to the view
        End With
        Return View(l_SubmitBaselineSelectLists)
    End Function


'This handles the POST resulting from the Submit button click
    <HttpPost()> _
    Public Function GetBaseline() As RedirectToRouteResult
        Dim l_iBaseline As Integer = Request.Form("cmbBaselineType")
        System.Web.HttpContext.Current.Cache("baselineId") = l_iBaseline
        Dim l_sBaselineName As String = m_BaselineRepository.GetBaselineName(l_iBaseline)
        System.Web.HttpContext.Current.Cache("baselineName") = l_sBaselineName
        Return RedirectToAction("StatusList", New With {.Bid = l_iBaseline})
    End Function

'action to display current features based on baseline
    Public Function StatusList(ByVal search As String, ByVal Bid As Integer) As ActionResult
        Return View(m_StatusRepository.GetStatusList(Bid, search))
    End Function

索引.vbhtml:

@ModelType FCSWebMVC.Models.SubmitBaselineSelectLists
@Code
ViewData("Title") = "Status Area"
End Code
<h4>@ViewData("Title")</h4>
<br />
<div>
@Using (Html.BeginForm("GetBaseline", "StatusArea"))
    @Html.Label("Select Baseline:")
    @Html.DropDownList("cmbBaselineType", Model.m_SelectListBaseline)@<br />@<br />

    @<input type="submit" value="Select!" />

End Using

StatusList.vbhtml:

@ModelType IEnumerable(Of FCSWebMVC.Status)

<link href="@Url.Content("~/Content/Tables.css")"
  rel="stylesheet" type="text/css" />

<br />
<div>

@Using (Html.BeginForm("GetSearchParameters", "StatusArea"))

    @<b>Search for Satus ID:</b>@<br />
    @Html.TextBox("search", String.Empty, New With {.size = "200"}) @<input type="submit" value="Find Status ID" />

End Using
</div>
<br />
<h4>Current Statuses:</h4>
<br />
@If (Model.Count > 0) Then
@<div class="table_div_status">
@Using (Html.BeginForm("StatusList", "StatusArea"))

    Dim grid = New WebGrid(canPage:=False, source:=Model)
    @grid.GetHtml(tableStyle:="webgrid-table", headerStyle:="webgrid-header", rowStyle:="webgrid-row-style", htmlAttributes:=New With {.id = "table1"}, columns:=grid.Columns(
        grid.Column("Status ID", format:=Function(str) Html.ActionLink(CType(str, System.Web.Helpers.WebGridRow).Value.Status_ID,
                                                                    "StatusData",
                                                                    New With {.BaselineID = CType(str, System.Web.Helpers.WebGridRow).Value.BaselineID,
                                                                              .StatusID = CType(str, System.Web.Helpers.WebGridRow).Value.Status_ID})),
        grid.Column("Level", format:=Function(str) Html.ActionLink(CType(str, System.Web.Helpers.WebGridRow).Value.Level,
                                                                    "StatusData",
                                                                    New With {.BaselineID = CType(str, System.Web.Helpers.WebGridRow).Value.BaselineID,
                                                                              .StatusID = CType(str, System.Web.Helpers.WebGridRow).Value.Status_ID})),
        grid.Column(columnName:="Approved_Short_String", header:="Approved Short String"),
        grid.Column(columnName:="Long_String", header:="Long String")))

End Using
</div>
Else
@<center><h3>No data found</h3></center>
End If

一旦用户单击提交按钮,我希望能够在选择列表下方的索引视图所在的同一页面中显示 StatusList 视图。我怎样才能做到这一点?

【问题讨论】:

    标签: jquery ajax asp.net-mvc asp.net-mvc-5


    【解决方案1】:

    假设您知道如何使用基本的 JavaScript,您将需要使用 AJAX 来做到这一点。我有一个答案here,它解决了与您的问题相对相似的问题。如果您打算使用 jQuery 执行 AJAX 请求,我的回答中有一个稍微更新的方法,jQuery.get,否则您需要使用 vanilla JS 查看 XHR 请求。

    您具体要做的是通过 AJAX 将您的信息发送到控制器并返回 PartialResult,或者只返回 PartialView

    【讨论】:

    • 我也从未使用过 JavaScript。我现在有点迷路了。
    • 是时候学习了! :D 在我的另一个答案中,serializeObject 部分只是用于将表单转换为正确的 JSON 对象。 AJAX 部分向 Web 服务器发起后台请求,以便浏览器可以发送请求并接收响应,而无需重新加载页面。您可以使用 Javascript 将响应添加到您的页面,而无需重新加载。
    【解决方案2】:

    您可以使用局部视图。

    1. 将您的第二个视图创建为局部视图
    2. 从当前视图对控制器中的操作方法进行 AJAX 调用
    3. 从动作方法返回部分视图
    4. 将结果附加到 div

    希望以下链接对您有所帮助 http://www.c-sharpcorner.com/UploadFile/d551d3/how-to-load-partial-views-in-Asp-Net-mvc-using-jquery-ajax/

    【讨论】:

    • 我应该把脚本放在index.vbhtml中吗?
    • 如何从下拉列表中获取值并将其传递给函数StatusList?
    • 是的,你应该把脚本放在 index.vbhtml 中。另外,做一个 AJAX POST 并附加关于 AJAX 调用成功事件的部分视图
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多