2008-12-17 73 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重)。

相關問題