2008-12-17 154 views
3

我有一种感觉,我太“网络形式”与此,但我会问无论如何。我在ASP.NET MVC项目中有一个表单,它有一些输入字段和两个按钮。一个按钮用于“过滤”其中一个列表框。另一个用于提交表单。我的观点看起来是这样的:允许ASP.NET MVC表单上的多个按钮的最佳方式是什么?

<%using (Html.BeginForm()) 
    {%> 
    <%=Html.TextBox("SearchItems") %> 
    <input type="submit" name="Command" value="Find" /> 
    <%=Html.ListBox("SelectedItems", new MultiSelectList(model.AvailableItems,"Id", "Name", model.SelectedItems))%> 
    //Some other form fields. 
    <input type="submit" name="Command" value="Send" /> 
    <%} %> 

我的行动看起来是这样的:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Index([Bind(Prefix = "")]SendMessageRequest model) 
    { 
     if (model.Command == "Find") 
      return SearchItems(model); 
     if (model.Command == "Send") 
      return Send(model); 
     throw new Exception("Invalid command."); 
    } 

该工程─控制器选择基于被点击的按钮正确的行动。但是,这并不理想,因为输入按钮的值也是显示的文本。如果我想翻译这个应用程序,那么这个行为就会中断。为了解决这个问题,我可以使用<按钮>,它允许文本和值有所不同。然而,这个应用程序是为Pocket IE,显然Pocket IE处理这些不同 - 它提交两个命令的值,这打破了行动。

由于这是用于Pocket IE,我也挺为我所用JavaScript做术语的限制。 Ajax已经出来,但是我可能会从按钮的onClick中设置一个隐藏的字段。

所以,我的问题是,什么是允许对一个MVC视图多个按钮的单一形式的最佳方式?或者,我是否应该以某种方式将我的观点分解为多种形式?

回答

1

不需要隐藏字段,您可以在按钮的单击事件上设置表单的操作。

的JavaScript(jQuery的)是一样的东西:

$("#myForm").attr("action", "mvcaction"); 
$("#myForm").submit(); 

你可以用,最多在需要一个参数是例如动作的标准功能。我们在菜单表单对象中使用这个标准菜单项,它工作得很好。

编辑:不知道,如果掌上电脑处理的JQuery可言,但如果它不应该能够做到上述的常规的JavaScript。

5

我会建议多种形式2种不同的动作。这我认为也是更可测试的:

(c => c.Search(),FormMethod.Get); {%> 查找 (c => c.Send(),FormMethod.Post); {%> 发送

或类似的东西。然后在控制器中有两个相应的操作。这意味着责任被打破。使用MVC,您可以拥有多种形式,与Webforms不同。所以你可以挣脱!

+0

这也应该删除的JavaScript支持 – 2008-12-17 23:28:52

+0

问题与方法的问题是,在这种情况下,“搜索”形式必须是_inside_“发送”的形式,并在页面上的所有值都必须坚持。在此解决方案中,如果用户在发送表单中输入了某些内容,然后搜索,则发送表单将失去其状态(FireFox除外)。 – Daniel 2008-12-18 15:34:59

0

我正在创建的应用程序需要大量ajax'd了,但多重形式的问题也一样。

我们用$来了解它。jQuery库中的post()方法。

$("#update").click(function() { 
       $.post("/Register", { name: $("#firstName").val(), 
        surname: $("#surname").val(), 
        username: $("#email").val(), 
        accountName: $("#accountName").val(), 
        password: $("#password").val() 
       }, 
        function(data) { 
         alert(data); 
        }); 
      }); 

并且取消按钮发回的值更少。

$("#cancel").click(function() { 
       $.post("/Cancel", { username: $("#email").val(), 
        password: $("#password").val() 
       }, 
        function(data) { 
         alert(data); 
        }); 
      }); 

再次确定其对JavaScript的依赖被启用,但是如果你要关闭你最好不要使用JavaScript互联网(和我的应用程序“的原因将是对JS重)。

相关问题