控制器方法:通过POST传递值与签名
//method declaration
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Step2_UpdateCart(bool? isNextStepClicked)
//one of many of the view's fields processed by the method
<input type="hidden" name="isNextStepClicked" value="false" />
我正在逆向工程一个视图/控制器集,其中视图中的表单有一系列通过提交传递的输入。其中一个输入是隐藏字段 - 它的名称可以在方法的签名中找到 - 并且是签名中唯一的值 - 其余的值来自请求对象。控制器方法:通过POST传递值与签名
我想也许它可能是一种情况下,该方法可以递归调用自己的一个不同的价值比形式进行,但我没有看到发生在任何地方。
这是否有意义? (无论是我的问题还是我的代码示例)。
许多感谢名单
您可能会发现其更好地利用输入模型或FormCollection
类型的优势。通过第一个选项,您可以定义您的属性,而MVC的默认模型联编程序将尽其所能将它们映射。例如:
public ActionResult Step2_UpdateCart(UpdateCartInputModel model)
凡UpdateCartInputModel
可以定义为:
public class UpdateCartInputModel {
public bool? isNextStepClicked { get; set; }
public bool? isSomeOtherPropertyClicked { get; set; }
}
随着FormCollection
,MVC把这个作为一个特殊的情况和行动接受的FormCollection
一个实例将填补它:
public ActionResult Step2_UpdateCart(FormCollection form)
与FormCollection
,你必须自己处理类型转换/转换。
我个人并不认为有必要尝试构建一些复杂的递归控制器动作,当你需要完成上述任一操作时。
我想你是问“参数来自哪里?”并通过参数我的意思是布尔? isNextStepClicked签名参数。据我所知,有三种方法可以调用Controller ActionResult。
第一个是使用RedirectToAction从另一个Action进行的直接调用。接下来就像上面列出的那样 - 从表单中,控件被声明为具有相同的ID作为你的命名参数(例如给出公共ActionResult ViewName(字符串信息)的签名。我个人觉得这很刺激,因为我喜欢所有的我代码与正确的外壳类型 - 但因为大多数表单ID以大写字母开头,所以我的签名参数也是如此。
第三,有直接的构造函数调用,这是最糟糕的,因为没有办法跟踪它使用Shift + F12(找到所有用途)的标记被调用。一些参数可以被命名,但不叫。控制器不需要值为每个参数。
希望这有助于你。:-)
什t确切地说是你的问题?为什么当你隐藏它并将其值设置为false时,甚至需要isNextStepClicked?显然它总是假的。所以如果它总是相同的(假)你不需要它。假设在控制器动作中它是错误的。然而,你拥有它的方式,它应该始终被初始化 - 为false。可能试着去除bool类型旁边的问号......此外,您可能想要更详细地解释您的问题。 – mare 2010-08-28 00:24:47
我没有包含视图代码,其中isNextStepClicked将被触发为true(或不依赖于验证例程)。我的问题是完全理解我继承的代码是在为什么只有其中一个视图的字段出现在签名中而其余部分是通过请求对象传递的非常狭窄的上下文中进行的。 – justSteve 2010-08-28 07:15:53
你不明白你在问什么。你的问题到底是什么? – Necros 2010-08-28 07:46:21