我想创建一个没有默认动作的表单。我尝试做,Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data", id = "AppForm" })但是它将当前操作方法名称分配给表单的操作部分,并将其呈现为
<form class="ng-pristine ng-valid" id="AppForm" action="/Portal/on/application" enctype="multipart/form-data" method="post" novalidate="novalidate">
</form>
Run Code Online (Sandbox Code Playgroud)
我在窗体上有两个单独的按钮,我正在关注本文http://stackoverflow.com/questions/442704/how-do-you-handle-multiple-submit-buttons-in-asp-net-mvc-framework以创建一个窗体,但是不确定如何创建一个不起作用的窗体。
谢谢
我知道这已经被问过多次了。但是到目前为止,我还没有找到可行的解决方案。
我在视图中有以下代码:
@using (Html.BeginForm("RoleEdit", "AccountRoles", FormMethod.Post, new { id = "updaterole" }))
{
<button name="mySubmit" formaction="@Url.Action("SetDefaultRole", "AccountRoles")" value="MakeDefault" class="button small">Make Default</button>
...
other code
...
<button type="submit" class="button small" value="save" name="save" id="save">@Resources.DashBoardTags.UpdateRoleTag</button>
}
Run Code Online (Sandbox Code Playgroud)
并在控制器中:
[HttpPost]
public ActionResult SetDefaultRole()
{
return View();
}
Run Code Online (Sandbox Code Playgroud)
和:
[HttpPost]
public ActionResult RoleEdit(List<UserRole> userRole, string mySubmit)
{
if (mySubmit == "Save Draft")
{
//save draft code here
}
else if (mySubmit == "Publish")
{
//publish code here
}
}
Run Code Online (Sandbox Code Playgroud)
当代码执行时:
当单击第一个提交按钮时,它将忽略SetDefaultRole函数并执行RoleEdit函数。
RoleEdit函数的值mySubmit为空。
请向我展示我的方式的错误!!!
我看了建议的解决方案:建议的解决方案
由此,我创建了一个名为MultipleButton的属性扩展,并更改了代码,以使代码现在看起来像这样: …
有人可以向我解释为什么这不起作用?我在一个页面上阅读了很多关于多个提交按钮的帖子,但我不明白后台发生了什么.我试图按照我看到其他人在这些帖子中所做的事情,但似乎都没有.我只想了解这里到底发生了什么.我怀疑这与发布页面时到底发生了什么有关.
两个按钮完全不同.第一个按钮发布表单.在表单的邮政编码中,然后将其重定向到Vehicle/Index.在第二个按钮不会发布形式,并直接进入/车/ CreateNewVehiclePart.
这就是我想要的.我希望两个按钮都能提交表单(因此我可以在继续之前执行验证并将更改保存到Vehicle).保存车辆数据后,我想根据单击的按钮移动到/ Vehicle/AddPartsToVehicle或/ Vehicle/CreateNewVehiclePart.
<table class="layouttable">
<tr>
<td>
@using (Html.BeginForm("AddPartsToVehicle", "Vehicle", FormMethod.Post, null))
{
<input type="submit" value="Add Parts To Vehicle" />
}
</td>
<td>
@using (Html.BeginForm("CreateNewVehiclePart", "Vehicle", FormMethod.Post, null))
{
<input type="submit" value="Create New Vehicle Part" />
}
</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
这是车型:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.Globalization;
namespace ShopLog.Models
{
public class Vehicle
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public …Run Code Online (Sandbox Code Playgroud) 我在ASP.NET MVC(v1)中有一个表单,它有2个输入按钮.每个提交按钮必须包含在这个单一的表单中,我需要知道用户按下了哪一个.
我知道检查FormCollection值的技巧,它将根据按下的按钮返回.例如,如果我有和用户单击Button2,我应该可以说Request.Form ["Button2"]!= null并且将评估为true,在这种情况下,我知道用户单击了该按钮.
但是,这对我不起作用.我的所有按钮的值都为null,因为它们中的不包含在Request.Form值中.ASP.NET MVC中是否存在吞下这些值的错误?
这是我的表单代码:
<% using (Html.BeginForm()) {%>
<% Html.RenderPartial( "EditAreaControl", Model ); %>
<div class="form-layout-command-container">
<div class="form-layout-command-area-alpha"><button type="submit" name="submit1" value="Save">Save</button></div>
<div class="form-layout-command-area-alpha"><button type="submit" name="submit2" value="SaveAndCopy">Save and Create Copy</button></div>
<div class="form-layout-command-area-beta"><%= Html.ActionLink("Cancel", "list") %></div>
</div>
<% } %>
Run Code Online (Sandbox Code Playgroud)
这是我的控制器代码:
[AcceptVerbs( HttpVerbs.Post )]
public ActionResult Add(FormCollection values )
{
if (values["submit1"] != null)
// always false
if (values["submit2"] != null)
// always false as well
}
Run Code Online (Sandbox Code Playgroud) 我需要对ASP.NET MVC View进行一些计算,这是一种与表单提交不同的操作.我已经尝试了各种方法通过ActionLink将当前模型传递给新的控制器操作,但模型似乎没有传递.
public ActionResult Calculate(MuralProject proj)
{
ProjectFormRepository db = new ProjectFormRepository();
List<Constant> constants = db.GetConstantsByFormType(FormTypeEnum.Murals);
proj.Materials = new MuralMaterials();
proj.Materials.Volunteers = this.GetVolunteerCount(constants, proj);
this.InitializeView();
return View("View", proj);
}
Run Code Online (Sandbox Code Playgroud)
我的Html.ActionLink语法需要什么才能让我调用它并使返回的视图具有相同的模型数据(具有计算的更改)?或者,还有另一种方法可以实现这一目标吗?
我也尝试了一个Ajax.ActionLink方法,但我遇到了同样的问题
编辑:"为您的提交按钮命名,然后检查控制器方法中提交的值" 这里显示的方法是我正在寻找的.
我是mvc的新手.我知道这种方式我可以处理相同形式的多个提交按钮.
<%
using (Html.BeginForm("LoginRegistration", new { action = "LoginRegistration", controller = "Register"}, FormMethod.Post, new { @class = "form", id = "formId" }))
{
%>
//your html code here
<input type="submit" name="submitButton" value="Login"/>
<input type="submit" name="submitButton" value="Register"/>
<% }%>
[HttpPost]
public ActionResult LoginRegistration(string submitButton)
{
switch (submitButton)
{
case "Login":
return RedirectToAction("Login");
case "Register":
return RedirectToAction("Register");
default:
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
在我的情况下,我必须为所有提交按钮提供按钮名称submitButton但我想给所有提交按钮提供不同的名称.可能吗?
我想知道有没有其他方法来处理这种情况.所以请用示例代码讨论所有其他方式来处理这种情况.谢谢
我看到另一个人以下面的方式处理同样的问题.代码给出但我不明白他的伎俩.他为一个提交按钮添加了一个隐藏字段...为什么?他将按钮值属性设置为true,并将相应的隐藏字段的value属性设置为false ...为什么我无法理解这个技巧.
另一个问题是何时调用action方法然后将如何传递bool值以及哪个控件的bool值将通过....请仔细阅读此更新的代码并指导我此代码如何工作.谢谢
<%
using (Html.BeginForm("LoginRegistration", new { action = "LoginRegistration", controller = "Register"}, FormMethod.Post, new { …Run Code Online (Sandbox Code Playgroud) 如何检测处理回发的控制器上的页面刷新/ F5键推?我需要区分用户按下两个按钮之一(例如,Next,Previous)和F5 /页面刷新发生的时间.
我的方案是一个单向导页面,在按下"下一步"或"上一步"按钮的每次用户调用之间显示不同的内容.我遇到的错误是当用户刷新页面/按下F5键时,浏览器将请求重新发送回控制器,后者作为回发处理,FormCollection类型用于查找"submitButton"键并获取其值(例如,"下一步","发送").这部分模仿了Dylan Beattie的帖子如何在ASP.NET MVC框架中处理多个提交按钮?.
也许我正在尝试将MVC 2弯曲到不应该去的地方,但我想继续使用当前的设计,因为底层数据库驱动显示内容和顺序.这允许我们在不修改显示内容的代码的情况下将新内容添加到数据库中.
谢谢,迈克尔
我有一个标准的ASP MVC 4表单,用户可以编辑一些细节,然后单击"批准"或"拒绝",这会导致回发.
当控制器在回发中收到模型时,我如何知道单击了哪个按钮?
我正在寻找一种标准的方法来做到这一点,所以我不会让下一个开发项目的开发人员神秘化.
编辑我正在使用立柱,
asp.net-mvc ×6
c# ×2
actionresult ×1
asp.net ×1
forms ×1
input ×1
postback ×1
refresh ×1
submit ×1
view ×1