C# 如何传递在一个html页面中输入的值并在另一个html页面中显示执行结果

C# 如何传递在一个html页面中输入的值并在另一个html页面中显示执行结果,c#,html,asp.net-mvc,model-view-controller,C#,Html,Asp.net Mvc,Model View Controller,我需要选择季度和年度,然后在提交时,这两个值应传递到我的存储过程“SummaryProc”,执行后,它将传递ID的行。。。。。请指导我,如果我写的代码是好的。我错过了链接,因为我无法理解如何链接所有这些。工作应用程序将是“在_Summary.cshtml中输入季度和年份->将值传递给控制器->在存储库代码中执行->从存储过程返回的行显示在SummaryTable.cshtml中” _Summary.cshtml <div class="form-g

我需要选择
季度和年度
,然后在提交时,这两个值应传递到我的存储过程
“SummaryProc”
,执行后,它将传递ID的行。。。。。请指导我,如果我写的代码是好的。我错过了链接,因为我无法理解如何链接所有这些。工作应用程序将是
“在_Summary.cshtml中输入季度和年份->将值传递给控制器->在存储库代码中执行->从存储过程返回的行显示在SummaryTable.cshtml中”

_Summary.cshtml

                     <div class="form-group">
                    <label class="control-label col-lg-4">Period:</label>
                    <div class="col-lg-8">
                        @Html.DropDownList("Quarter", new SelectListItem[] { (new SelectListItem() { Text = "Q1", Value = "1" }), (new SelectListItem() { Text = "Q2", Value = "2" }), (new SelectListItem() { Text = "Q3", Value = "3" }), (new SelectListItem() { Text = "Q4", Value = "4" }) }, "--Select Quarter--", new { @class = "form-control", id = "Quarter" })
                        <br />
                        @Html.DropDownList("Year", new SelectListItem[] { (new SelectListItem() { Text = "2016", Value = "2016" }), (new SelectListItem() { Text = "2017", Value = "2017" }) }, "--Select Year--", new { @class = "form-control", id = "Year" })
                    </div>
                </div>

                    <div class="row">
                        <div class="col-lg-offset-4" style="padding: 10px 0px 0px 0px;">
                            <input type="submit" id="submit" value="Submit" class="btn btn-lg btn-success" />
                        </div>
                    </div>
执行存储过程的代码:

 public IEnumerable<SummaryConfiguration> SummaryProc(int Quarter, int Year)
          {
              var model = new List<SummaryConfiguration>();


              using (var dbCmd = defaultDB.GetStoredProcCommand("dbo.SummaryProc"))
              {
                  defaultDB.AddInParameter(dbCmd, "Quarter", System.Data.DbType.Int32, Quarter);
                  defaultDB.AddInParameter(dbCmd, "Year", System.Data.DbType.Int32, Year);
                  var varCmd = defaultDB.ExecuteReader(dbCmd);

                  while (varCmd.Read())
                  {
                      // add items in the list
                      model.Add(new SummaryConfiguration()
                      {
                          ID = Convert.ToString(varCmd["ID"]),
                        //rest of the code
                      });
                  }
              }
              return model;
          }
public IEnumerable SummaryProc(国际季度,国际年度)
{
var模型=新列表();
使用(var dbCmd=defaultDB.GetStoredProcCommand(“dbo.SummaryProc”))
{
defaultDB.AddInParameter(dbCmd,“Quarter”,System.Data.DbType.Int32,Quarter);
defaultDB.AddInParameter(dbCmd,“Year”,System.Data.DbType.Int32,Year);
var varCmd=defaultDB.ExecuteReader(dbCmd);
while(varCmd.Read())
{
//在列表中添加项目
model.Add(新的SummaryConfiguration()
{
ID=Convert.ToString(varCmd[“ID”]),
//代码的其余部分
});
}
}
收益模型;
}

在不使用ajax的情况下处理此问题的典型方法是使用一个GET方法和一个返回该方法的视图

首先创建视图模型来表示视图

public class SummaryConfigurationVM
{
    public int Quarter { get; set; }
    public int Year { get; set; }
    public IEnumerable<SummaryConfiguration> Configurations { get; set; }
    public IEnuemrable<SelectListItem> QuarterList { get; set; }
    public IEnuemrable<SelectListItem> YearListList { get; set; }
}

注意,您还需要考虑“代码>四分之一<代码>和<代码>年份<代码>的值在预期范围内。

你的观点将是正确的

@model SummaryConfigurationVM
....
@using (Html.BeginForm("Summary", "yourControllerName", FormMethod.Get))
{
    @Html.LabelFor(m => m.Quarter)
    @Html.DropDownListFor(m => m.Quarter, Model.QuarterList, "--Select Quarter--")
    @Html.ValidationMessageFor(m => m.Quarter)

    .... // ditto for Year

    <input type="submit" value="Submit" />
}

<table>
    <thead>
        <tr>
            <th>@Html.DisplayNameFor(m => m.Configurations.FirstOrDefault().LineID)</th>
            ....
        </tr>
    </thead>
    <tbody>
        @foreach( var item in Model.Configurations)
        {
            <tr>
                <td>@Html.DisplayFor(modelItem => item.LineID)</td>
                .... // other properties of SummaryConfiguration
            </tr>
        }
    </tbody>
</table>
@model SummaryConfigurationVM
....
@使用(Html.BeginForm(“Summary”、“yourControllerName”、FormMethod.Get))
{
@LabelFor(m=>m.Quarter)
@Html.DropDownListFor(m=>m.Quarter,Model.QuarterList,“--Select Quarter--”)
@Html.ValidationMessageFor(m=>m.Quarter)
..//本年同上
}
@DisplayNameFor(m=>m.Configurations.FirstOrDefault().LineID)
....
@foreach(Model.Configurations中的var项)
{
@DisplayFor(modelItem=>item.LineID)
..//SummaryConfiguration的其他属性
}

您也可以考虑在“A <代码> >中显示<代码> <代码> @(model .CONTALATION ANY)){< /代码>块(如果
false
则显示一条消息,指出未找到任何结果。

如果要返回不同的视图,则需要指定视图名称。但是,究竟为什么不绑定到模型,而使用
Convert.ToInt32(form[“Quarter”]
。如果使用ajax发布选项值并使用表的部分视图更新现有视图,您将获得更好的性能。而且您的
SummaryProc
方法返回
IEnumerable
,因此
@foreach(Model.sumConfig中的var项)
没有意义(
IEnumerable
不包含任何属性)并且您的代码只会抛出@StephenMuecke,所以我可以只使用“@foreach(模型中的var项)”吗?是的,您可以(但是您没有在新视图中显示所选选项,这不利于良好的UI)在下一个视图中,我需要在表中显示lineid、project等。我对代码做了一些更改。让我更新问题。我根据您的答案进行了更改。但当我运行应用程序时,它不会打开需要输入季度和年度的页面。引发异常“[ArgumentException:parameters dictionary包含方法'System.Web.Mvc.ActionResult SummaryTable(Int32,Int32)的不可为空类型'System.Int32'的参数'quarter'的空条目'在'USTGlobal.WorkBench.UI.Controllers.FloorPlanController'中。可选参数必须是引用类型、可为Null的类型或声明为可选参数。参数名称:parameters]“如果您希望能够导航到该页面而不传递任何参数,则只需将参数设置为可空即可,即公开行动结果摘要(国际季度、国际年度)
但是,在运行查询之前,您肯定需要验证它们是否为
null
。对于示例,如果其中一个为
null
,则您可以将
配置设置为空列表(并且不调用
SummaryProc()
method。给我10分钟,我会用一个典型的例子更新答案,但你可能需要根据你的逻辑进行修改。这个特殊的异常现在已经消失了。但是我在SummaryProc上得到另一个关于强制转换“对象不能从DBNull强制转换为其他类型”的异常调用该方法时是否使用了
quarter.Value,year.Value
public ActionResult Summary(int? quarter, int? year)
{
    IEnumerable<SummaryConfiguration> configurations = new List<SummaryConfiguration>();
    if (quarter.HasValue && year.HasValue)
    {
        configurations = floorService.SummaryProc(quarter.Value, year.Value);
    }
    SummaryConfigurationVM model = new SummaryConfigurationVM()
    {
        Quarter = quarter,
        Year = year,
        Configurations = configurations,
        QuarterList = new List<SelectListItem>()
        {
            new SelectListItem(){ Text = "Q1", Value = "1" },
            ....
        },
        YearList = new List<SelectListItem>()
        {
            ....
        }
    };
    return View(model);
}
@model SummaryConfigurationVM
....
@using (Html.BeginForm("Summary", "yourControllerName", FormMethod.Get))
{
    @Html.LabelFor(m => m.Quarter)
    @Html.DropDownListFor(m => m.Quarter, Model.QuarterList, "--Select Quarter--")
    @Html.ValidationMessageFor(m => m.Quarter)

    .... // ditto for Year

    <input type="submit" value="Submit" />
}

<table>
    <thead>
        <tr>
            <th>@Html.DisplayNameFor(m => m.Configurations.FirstOrDefault().LineID)</th>
            ....
        </tr>
    </thead>
    <tbody>
        @foreach( var item in Model.Configurations)
        {
            <tr>
                <td>@Html.DisplayFor(modelItem => item.LineID)</td>
                .... // other properties of SummaryConfiguration
            </tr>
        }
    </tbody>
</table>