//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" />
我正在对一个视图/控制器集进行逆向工程,其中视图中的表单具有一系列通过提交传递的输入。其中一个输入是隐藏字段 - 它的名称在方法的签名中找到 - 并且是签名中唯一的值 - 其余值来自Request对象。
我想也许这可能是一种情况,该方法可以递归调用自己的值不同于所携带的形式,但我不认为这发生在任何地方。
这有什么意义吗? (无论是我的问题还是我的代码示例)。
很多人
答案 0 :(得分:1)
您可能会发现利用输入模型或FormCollection
类型更好。使用第一个选项,您可以定义属性,MVC的默认模型绑定器将尽力映射它们。 E.g:
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
,您必须自己处理类型转换/转换。
我个人认为没有必要尝试构建一些复杂的递归控制器动作,当您需要完成以上任何一项时,您可以完成。
答案 1 :(得分:0)
我想你在问“参数来自哪里?”而参数我的意思是布尔? isNextStepClicked签名参数。根据我的知识,有三种方法可以调用Controller ActionResult。
第一个是使用RedirectToAction从另一个Action直接调用。接下来是上面列出的 - 从表单中,声明控件与您的命名参数具有相同的ID(例如,提供公共ActionResult ViewName的签名(字符串信息)。我个人觉得这很烦人,因为我喜欢拥有我的所有具有正确类型的外壳的代码 - 但由于大多数表单ID以大写字母开头,因此我的签名参数也是如此。
第三,有直接的构造函数调用。这是最糟糕的,因为没有办法跟踪使用Shift + F12从标记中调用它(查找所有用法)。某些参数可以命名但不能调用。控制器不需要每个参数的值。
希望这会对你有所帮助。 :-)