我们现在一直在寻找一天,我们无法想象将数据从我们的视图传递给控制器。实际上,我们希望用户从Index()视图的下拉列表中选择一个小时作为时间块的StartTime。目前我们必须遵循代码。
我们在控制器中的行动
public ActionResult genBlocks(string StartTime, FormCollection collection)
{
int blocksPerDay = 4;
int strH, strM;
List<Block> blocks = new List<Block>();
for (int i = 0; i < blocksPerDay; i++)
{
if (i != 0)
{
strH = blocks[i-1].EndTime.Hour;
strM = blocks[i-1].EndTime.Minute;
}
else
{
strH = Convert.ToInt32(collection["StartTime"]);
strM = 0;
}
Block block = new Block
{
FieldDayId = 1,
Available = true,
StartTime = DateTime.Today + new TimeSpan(strH, strM, 0),
EndTime = DateTime.Today + new TimeSpan(strH, strM + (db.Sports.Find(1).Duration*(i+1)), 0),
};
blocks.Add(block);
db.Blocks.Add(block);
db.SaveChanges();
}
return RedirectToAction("Index");
}
在我们的视图中,我实现了一个表单
@using (Html.BeginForm("genBlocks"))
{
<input type="text"name="StartTime" />
@Html.DropDownList("StartTime", String.Empty)
<div id="genBlocks" class="button">
<input type="submit" />
</div>
}
所以我们尝试使用dorpdownlist和文本框,但没有一个可以解决...
答案 0 :(得分:0)
尝试使用以下代码
控制器 - 确保将HttpPost属性放在那里
[HttpPost]
public ActionResult genBlocks(string StartTime,FormCollection collection)
{
return View();
}
您的观点 - 确保您采取实际行动&amp; beginform方法中的控制器名称
@using (Html.BeginForm("genBlocks","ControllerName"))
{
<input type="text" name="StartTime" />
<div id="genBlocks" class="button">
<input type="submit" />
</div>
}
答案 1 :(得分:0)
@using (Html.BeginForm("genBlocks", "Block"))
{
@Html.DropDownList("StartTime", String.Empty)
<input type="submit" class="button" value="Generate blocks" />
}
是索引的解决方案:)
答案 2 :(得分:0)
您的下拉列表实际上只发回一个标量值 - 当前选定的值。这可以是int,string,等等。如果它是模型的一部分,您可以使用Html.DropDownListFor(m =&gt; m.Hour,[INSERT POSSIBLE SELECTITEMLIST ARRAY HERE])。
另一个选项是,如果只需要获取该值,只需在动作方法上接受int,string等。
似乎问题是过度工作。