Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在单击按钮时将Html.DropdownListFor值传递给其他视图_C#_Asp.net Mvc - Fatal编程技术网

C# 在单击按钮时将Html.DropdownListFor值传递给其他视图

C# 在单击按钮时将Html.DropdownListFor值传递给其他视图,c#,asp.net-mvc,C#,Asp.net Mvc,我正在尝试在MVC中创建一个小型预订系统。现在我已经创建了一个模型(BookingViewModel)一个控制器(BookingController)和一个包含下拉列表和按钮的视图 用户将通过多个步骤(视图)完成预订。BookingController中的索引视图是第一步 因此,下一步是座位(用户可以指向他想要坐的座位)。在这里,我考虑创建另一个控制器,并创建一个索引视图。如何从第一个索引视图获取此步骤的值 我知道我应该使用Httppost方法,但现在我遇到了一个错误: 具有键“Departur

我正在尝试在MVC中创建一个小型预订系统。现在我已经创建了一个模型(BookingViewModel)一个控制器(BookingController)和一个包含下拉列表和按钮的视图

用户将通过多个步骤(视图)完成预订。BookingController中的索引视图是第一步

因此,下一步是座位(用户可以指向他想要坐的座位)。在这里,我考虑创建另一个控制器,并创建一个索引视图。如何从第一个索引视图获取此步骤的值

我知道我应该使用Httppost方法,但现在我遇到了一个错误:

具有键“DepartureRoute”的ViewData项的类型为“System.String”,但必须为“IEnumerable”类型

因此,根据您在第一步中输入的值,我希望在下一步中使用这些值,以便搜索数据库

预订控制器

namespace BookingMvc.Controllers
{
public class BookingController : Controller
{
    // GET: Booking
    public ActionResult Index()
    {
        var vm = new BookingViewModel();

        var citiesList = new List<SelectListItem>
    {
        new SelectListItem { Value = "1", Text = "Oslo to Copenhagen" },
        new SelectListItem { Value = "2", Text = "Copenhagen to Oslo" },
        new SelectListItem { Value = "2", Text = "Copenhagen to Stockholm" },
        new SelectListItem { Value = "3", Text = "Stockholm to Copenhagen" },
        new SelectListItem { Value = "1", Text = "Oslo to Stockholm" },
        new SelectListItem { Value = "3", Text = "Stockholm to Oslo" },
    };

        var numberList = new List<SelectListItem>
    {
        new SelectListItem { Value = "0", Text = "0" },
        new SelectListItem { Value = "1", Text = "1" },
        new SelectListItem { Value = "2", Text = "2"}
    };

        vm.Cities = citiesList;
        vm.Number = numberList;

        return View(vm);
    }

    [HttpPost]
    public ActionResult Index(BookingViewModel vm)
    {
        if (ModelState.IsValid)
        {

        }
            return View(vm);   
    }

}
}
namespace BookingMvc.Controllers
{
公共类BookingController:控制器
{
//获取:预订
公共行动结果索引()
{
var vm=新BookingViewModel();
var citiesList=新列表
{
新建SelectListItem{Value=“1”,Text=“奥斯陆到哥本哈根”},
新建SelectListItem{Value=“2”,Text=“哥本哈根到奥斯陆”},
新建SelectListItem{Value=“2”,Text=“哥本哈根到斯德哥尔摩”},
新建SelectListItem{Value=“3”,Text=“斯德哥尔摩到哥本哈根”},
新建SelectListItem{Value=“1”,Text=“奥斯陆至斯德哥尔摩”},
新建SelectListItem{Value=“3”,Text=“斯德哥尔摩到奥斯陆”},
};
var numberList=新列表
{
新建SelectListItem{Value=“0”,Text=“0”},
新建SelectListItem{Value=“1”,Text=“1”},
新建SelectListItem{Value=“2”,Text=“2”}
};
vm.Cities=城市列表;
vm.Number=numberList;
返回视图(vm);
}
[HttpPost]
公共行动结果索引(BookingViewModel vm)
{
if(ModelState.IsValid)
{
}
返回视图(vm);
}
}
}
预订视图模型

namespace BookingMvc.Models
{
public class BookingViewModel
{
    public string departureroute { get; set; }
    public string returnroute { get; set; }
    public DateTime departuredate { get; set; }
    public DateTime returndate { get; set; }
    public int adults { get; set; }
    public int childrens { get; set; }

    //Enum lists
    public IEnumerable<SelectListItem> Cities { get; set; }
    public IEnumerable<SelectListItem> Number { get; set; }
}
}
namespace BookingMvc.Models
{
公共类BookingViewModel
{
公共字符串departureroute{get;set;}
公共字符串returnroute{get;set;}
public DateTime departuredate{get;set;}
public DateTime returndate{get;set;}
公共整数{get;set;}
public int childrens{get;set;}
//枚举列表
公共IEnumerable城市{get;set;}
公共IEnumerable数{get;set;}
}
}
第1步“索引视图”

@使用(Html.BeginForm())
{
@Html.Label(“发送路线”)
@DropDownListFor(m=>m.departureroute,Model.Cities,new{@class=“dropdownlist”})
@Html.Label(“出发日期”)
@TextBox(“Name”,null,new{@class=“dropdownlist”})
@Html.Label(“成人”)
@DropDownListFor(m=>m.成人,Model.Number,新{@class=“dropdownlist”}) @Html.Label(“返回路线”)
@DropDownListFor(m=>m.returnroute,Model.Cities,new{@class=“dropdownlist”})
@Html.Label(“返回日期”)
@TextBox(“Name”,null,new{@class=“dropdownlist”})
@Html.Label(“子项”)
@DropDownListFor(m=>m.childrens,Model.Number,new{@class=“dropdownlist”}) @Html.Label(“预订信息”)
继续 }

希望有人能告诉我,为了获得下一步的值(视图)

在您的POST方法中,您有
返回视图(vm)
,但您不重新填充
模型。城市
选择列表,使其
为空
。因为它的
null
所以
DropDownListFor()
方法的回退是
departureroute
必须是
IEnumerable
,但它不是(它的
string
),因此出现了错误。那么您建议我怎么做呢?在
返回视图(vm)行之前
您需要重新填充
选择列表
,就像您在GET方法中所做的那样,这将防止该错误。但是您的代码中仍然存在多个其他错误,例如,您有2个
@Html.TextBox(“Name”,…)
,它们正在生成与您的模型没有关系的控件(并生成无效的Html)。创建非标签的
元素(单击它们不会将焦点设置为关联控件)
@using (Html.BeginForm())
{

<div class="col-sm-4">
    @Html.Label("Outgoing route") <br />
    @Html.DropDownListFor(m => m.departureroute, Model.Cities, new { @class = "dropdownlist" })

    <br />

    @Html.Label("Departure date") <br />
    <div>
        @Html.TextBox("Name", null, new { @class = "dropdownlist" })
    </div>


    <br />

    @Html.Label("Adult") <br />
    @Html.DropDownListFor(m => m.adults, Model.Number, new { @class = "dropdownlist" })
</div>

<div class="col-sm-4">
    @Html.Label("Return route") <br />
    @Html.DropDownListFor(m => m.returnroute, Model.Cities, new { @class = "dropdownlist" })

    <br />

    @Html.Label("Return date") <br />
    <div>
        @Html.TextBox("Name", null, new { @class = "dropdownlist" })

    </div>

    <br />

    @Html.Label("Children") <br />
    @Html.DropDownListFor(m => m.childrens, Model.Number, new { @class = "dropdownlist" })
</div>


<div class="col-sm-4">
    <div class="bookinginfomation">
        @Html.Label("Booking information") <br />
        <button type="submit" class="bookingbutton">Continue</button>
    </div>
</div>
}