我按照SO中建议的例程,使用了两个同名的按钮。
我的视图中有两个提交按钮。
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="SaveAndAddMore" name="command" class="btn btn-default" />
<input type="submit" value="SaveAndContinue" name="command" class="btn" />
</div>
</div>
在控制器中,我正在检查(或至少要检查)传递的命令的值
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateEducation([Bind(Include = "DegreeEarned,Description,Institution,AcquiredDate,EducationStartDate,EducationEndDate,Department,InstitutionAddress,ReferenceName,ReferencePhoneNumber,ReferenceEmail")] Education ed, Command command)
{
if (ModelState.IsValid)
{
var user = userManager.FindById(User.Identity.GetUserId());
user.ExpertInfo.Educations.Add(ed);
db.SaveChanges();
if (command == Command.SaveAndAddMore)
return RedirectToAction("CreateEducation");
else
return RedirectToAction("CreateWorkExperience");
}
return View(ed);
}
然而/当我点击SaveAndAddMore
按钮(具有默认类的按钮)时,我的控制器方法会使用正确的命令值正确调用,一切都很好。
直到我点击SaveAndContinue
。在此实例中,控制器未传递任何命令值。
参数字典包含参数的空条目 &#39;命令&#39;非可空类型&#39; xxx.Models.Command&#39;方法 &#39; System.Web.Mvc.ActionResult CreateEducation(Experts.Models.Education, Experts.Models.Command)&#39;在 &#39; xxx.Areas.Expert.Controllers.ExpertInfoesController&#39 ;.一个 可选参数必须是引用类型,可空类型或be 声明为可选参数。参数名称:参数
Command类型是枚举
public enum Command { SaveAndAddMore, SaveAndNext, Save, Delete }
我哪里出错了?
答案 0 :(得分:3)
正如你所说,{参数}在Action参数中是一个枚举:
Command
因此,给予按钮的任何值都需要与Emum值相同,因此您的第一个按钮的工作值与Enum值相同,即public enum Command { SaveAndAddMore, SaveAndNext, Save, Delete }
。将第二个按钮的值更改为SaveAndAddMore
将按预期工作。所以你改变后的div将是:
SaveAndNext