将两个参数从下拉列表和 javascript 传递给控制器

本文关键字:javascript 控制器 下拉列表 参数 两个 | 更新日期: 2023-09-27 18:30:42

我正在使用 mvc 2010 Expressc# 中创建一个应用程序,我有一个由 3 个不同表组成的视图:tmarketstcountriestanalysis 。每个市场都有许多国家,每个国家可以有多个分析(由code定义)。

我有一个

视图来选择要咨询的分析(它将代码传递给控制器),然后在下一个视图中,我有一个不同市场的下拉列表(以便用户可以看到该市场国家/地区的分析以进行该分析)。我需要有两种不同的观点,因为我在第二种观点中还需要其他选择。

Inform控制器:

public ActionResult Filter(string id)
{
    var merc = from a in dre.v_AnalysisCountry
               where a.Code == id
               select a;
    var query1 = merc.Select (a => new { a.Code,a.Market}).Distinct().OrderBy(a => a.Market);
    ViewBag.mar = new SelectList(query1.AsEnumerable(), "Code", "Market");
    return View();
}

查看Filter

<script type="text/javascript">
$(function () {
    $("#Market").change(function () {
    var actionUrl = $('#TheForm1').attr('action') + '/' + $('#Market').val();
        $('#TheForm1').attr('action', actionUrl);
        $('#TheForm1').submit();
    });
});
</script>
@using (Html.BeginForm("FilterAnMark", "Inform", FormMethod.Post, new { id = "TheForm1"})){
@Html.DropDownList("Market", (SelectList)ViewBag.mar, "Select a market")

}

为了用不同的市场填充下拉列表,我的咨询从codemarket本身中选择它们,以便以后我可以将分析代码传递给控制器以供下一view

问题是我还需要将市场传递给controller,而不仅仅是下拉列表中的用户。我尝试做这样的事情:

@using (Html.BeginForm("FilterAnMark", "Inform", FormMethod.Post, new { id = "TheForm1", id2 = @ViewBag.idAn })){
    @Html.DropDownList("Market", (SelectList)ViewBag.mar, "Select a market")
}

然后在我controller

var idAnalysis = (from v in dre.v_AnalysisCountry
                  where v.Code == id
                  select v.IdAnalysisCountry).FirstOrDefault();
ViewBag.idAn = idAnalysis;

但它不起作用。

----------------------------------------------------------编辑

------------------------------------------------------------------

我在视图中添加了一个隐藏属性

@{
    string code= ViewBag.code;
}
@using (Html.BeginForm("FilterAnMark", "Inform", FormMethod.Post, new { id = "TheForm1"})){
    @Html.DropDownList("Market", (SelectList)ViewBag.mar, "Select a market")
    @Html.Hidden("code", code)
}

当它将代码传递到下一个视图时,它可以工作。这里的问题出现在下一个视图中。我正在使用网络网格来显示国家/地区。

WebGrid grid = new WebGrid(Model, defaultSort: "Market", rowsPerPage: 15);

当用户尝试显示表的第二页时,它会显示一个空白表,因为它不记得此隐藏属性。

如果您能帮助我提供另一种解决方案或修复我找到的此部分解决方案,我将不胜感激。提前感谢!

将两个参数从下拉列表和 javascript 传递给控制器

最后,

我通过在控制器中添加一个中间操作结果(IntermFilter)来解决隐藏属性的问题。

它接收MarketCode,并获取满足这两个参数的第一个分析的 Id。然后,它重定向到一个视图,在该视图中,WebGrid 像以前一样呈现,就像在 FilterMarket ActionResult 中一样,它从IdAnalysis中获取MarketCode

这是我的代码:

public ActionResult IntermFilter(string id, string code)
{
    int idFirstAn = (from m in dre.v_AnalysisCountry
                      where m.Code == code && m.Market == id
                      select m.IdAnalysis).FirstOrDefault();
    return RedirectToAction("FilterAnMark", new { id = idFirstAn });
}
public ActionResult FilterAnMark(int id)
{
    var query = (from m in dre.v_AnalysisCountry
                 where m.IdAnalysis == id
                 select m).FirstOrDefault();
    var countries = new FilterManager().ObtainMarkets(query.Code, query.Market);
    ViewBag.code = query.Code;
    ViewBag.market = query.Market;
    return View(countries);
}