首页 > 解决方案 > 如何将参数传递给控制器​​功能

问题描述

所以我有一个这样的表格:

@using (Html.BeginUmbracoForm<DataController>("SetYear", null, new { @id = "yearDropdown" }))
{
    <div class="form-group">
        <select id="Year" name="Year" class="form-control">

            @if (objModel.Annums != null)
            {
                foreach (Int32 intYear in objModel.Annums.OrderByDescending(x => x).ToList())
                {
                    <option 
                        @if (intYear == DateTime.Now.Year) 
                        { 
                            <text>selected</text> 
                        } 
                        value="@intYear">
                        @intYear
                    </option>
                }
            }

        </div>
    </div>
}

其中的jQuery一部分提交了更改表单(我意识到这可以内联完成):

if ($("#yearDropdown").length) {
    $("#Year").on('change', function () {
        $("#yearDropdown").submit();
    });
}

我想要做的是将 传递Year给控制器​​中的函数,如下所示:

public void SetYear (Int32 intYear)
{
    System.Web.HttpContext.Current.Session["Year"] = intYear;
}

这可以只用 C# 来完成,还是我必须querystring在表单 URL 上附加一个?

标签: c#jqueryrazormodel-view-controller

解决方案


控制器中的方法应该是一个 Action,它应该返回一个 ActionResult:

[HttpPost]
public ActionResult SetYear (Int32 intYear)
{
    System.Web.HttpContext.Current.Session["Year"] = intYear;
    return View();
}

此外,Select元素名称必须与 Action 方法的参数名称匹配 ( intYear):

@using (Html.BeginUmbracoForm<DataController>("SetYear", null, new { @id = "yearDropdown" }))
{
    <div class="form-group">
        <select id="Year" name="intYear" class="form-control">

            @if (objModel.Annums != null)
            {
                foreach (Int32 intYear in objModel.Annums.OrderByDescending(x => x).ToList())
                {
                    <option 
                        @if (intYear == DateTime.Now.Year) 
                        { 
                            <text>selected</text> 
                        } 
                        value="@intYear">
                        @intYear
                    </option>
                }
            }

        </div>
    </div>
}

推荐阅读