提交button的MVC已被按下
我在我的MVC表单上有两个button:
<input name="submit" type="submit" id="submit" value="Save" /> <input name="process" type="submit" id="process" value="Process" />
从我的控制器动作,我怎么知道哪一个被按下?
同时命名您的提交button
<input name="submit" type="submit" id="submit" value="Save" /> <input name="submit" type="submit" id="process" value="Process" />
然后在你的控制器得到提交的价值。 只有点击的button才能通过它的值。
public ActionResult Index(string submit) { Response.Write(submit); return View(); }
您当然可以评估这个值,用一个开关块执行不同的操作。
public ActionResult Index(string submit) { switch (submit) { case "Save": // Do something break; case "Process": // Do something break; default: throw new Exception(); break; } return View(); }
<input name="submit" type="submit" id="submit" value="Save" /> <input name="process" type="submit" id="process" value="Process" />
在你的控制器动作中:
public ActionResult SomeAction(string submit) { if (!string.IsNullOrEmpty(submit)) { // Save was pressed } else { // Process was pressed } }
这是一个更好的答案,所以我们可以有一个button的文本和值:
</p> <button name="button" value="register">Register</button> <button name="button" value="cancel">Cancel</button> </p>
和控制器:
public ActionResult Register(string button, string userName, string email, string password, string confirmPassword) { if (button == "cancel") return RedirectToAction("Index", "Home"); ...
总之它的一个SUBMITbutton,但你select名称使用的名称属性,它更强大,因为你没有义务的控制器方法参数的名称提交或button,你可以调用它,只要你喜欢… … –
你可以从下面的名称标签中识别你的button,你需要在你的控制器中这样检查
if (Request.Form["submit"] != null) { //Write your code here } else if (Request.Form["process"] != null) { //Write your code here }
这是一个非常简单的方法,使用自定义的MultiButtonAttribute非常简单,
总结一下,让你的提交button是这样的:
<input type="submit" value="Cancel" name="action" /> <input type="submit" value="Create" name="action" />
你的这样的行为:
[HttpPost] [MultiButton(MatchFormKey="action", MatchFormValue="Cancel")] public ActionResult Cancel() { return Content("Cancel clicked"); } [HttpPost] [MultiButton(MatchFormKey = "action", MatchFormValue = "Create")] public ActionResult Create(Person person) { return Content("Create clicked"); }
并创build这个类:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)] public class MultiButtonAttribute : ActionNameSelectorAttribute { public string MatchFormKey { get; set; } public string MatchFormValue { get; set; } public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo) { return controllerContext.HttpContext.Request[MatchFormKey] != null && controllerContext.HttpContext.Request[MatchFormKey] == MatchFormValue; } }
这篇文章不会回答Coppermill,因为他已经很久以前回答了。 我的文章将有助于谁会寻求这样的解决scheme。 首先,我不得不说,“WDuffy的解决scheme是完全正确的”,它工作正常,但我的解决scheme(不是实际上是我的)将用于其他元素,并使表示层更独立于控制器(因为您的控制器依赖用于显示button标签的“值”,该function对其他语言很重要)。
这是我的解决scheme,给他们不同的名字,像:
</p> <input type="submit" name="buttonSave" value="Save"/> <input type="submit" name="buttonProcess" value="Process"/> <input type="submit" name="buttonCancel" value="Process"/> </p>
而且您必须在下面的动作中指定button的名称作为参数:
public ActionResult Register(string buttonSave, string buttonProcess, string buttonCancel){if (buttonSave!= null) {//save is pressed } if (buttonProcess!= null) {//Process is pressed } if (buttonCancel!= null) {//Cancel is pressed }
当用户使用其中一个button提交页面时,只有一个参数具有值。 我想这会对别人有帮助。
// Buttons <input name="submit" type="submit" id="submit" value="Save" /> <input name="process" type="submit" id="process" value="Process" /> // Controller [HttpPost] public ActionResult index(FormCollection collection) { string submitType = "unknown"; if(collection["submit"] != null) { submitType = "submit"; } else if (collection["process"] != null) { submitType = "process"; } } // End of the index method
为了更容易,我会说你可以改变你的button到以下内容:
<input name="btnSubmit" type="submit" value="Save" /> <input name="btnProcess" type="submit" value="Process" />
你的控制器:
public ActionResult Create(string btnSubmit, string btnProcess) { if(btnSubmit != null) // do something for the Button btnSubmit else // do something for the Button btnProcess }
给这两个button的名称,并从窗体中检查值。
<div> <input name="submitButton" type="submit" value="Register" /> </div> <div> <input name="cancelButton" type="submit" value="Cancel" /> </div>
在控制器端:
public ActionResult Save(FormCollection form) { if (this.httpContext.Request.Form["cancelButton"] !=null) { // return to the action; } if (this.httpContext.Request.Form["submitButton"] !=null) { // save the oprtation and retrun to the action; } }
你不能找出使用Request.Form集合? 如果进程被点击,request.form [“process”]将不会为空
- 没有ASP.NET页面的ResolveUrl
- 检测到ASP.NET网页的冲突版本:指定的版本是“1.0.0.0”,但bin中的版本是“2.0.0.0”
- 从C#中的DataTable中删除列
- GridViewsorting:SortDirection始终为升序
- .net localhost网站始终如一地获取动脉信号/ poll?transport = longPolling&connectionToken =调用
- 避免不带参数的SQL注入
- 在ASP.NET MVC 3中添加您自己的HtmlHelper
- 导入和导出Excel – 什么是最好的图书馆?
- 如何解决我的ASP.Net MVC应用程序iisreset后发生的AntiForgeryTokenexception?