2013-02-15 61 views
1

我們有一個顯示用戶列表的用戶信息的表單。我們有一個操作鏈接,以轉到用戶更新信息的詳細信息視圖。我們的應用程序是ASP.Net 4.0和MVC的混合體。我們通常使用加密來屏蔽我們在查詢字符串中使用的變量,但是當我們嘗試加密查詢字符串時,MVC會扼殺。我們正在使用Microsoft Enterprise 5.0 Cryptogrophy類。 我們將如何去加密查詢字符串或根本不使用查詢字符串來傳遞數據? 我們使用MVC 4和Razor。IN MVC 4如何在不使用查詢字符串的情況下將數據傳遞到控制器

我們現在正在做這樣的事情: @ Url.Action( 「編輯」, 「用戶」,新{ID = user.Id}

BTW,我是新來的MVC,所以有可能是一個簡單的答案,這一點,我只是不知道

這將是非常好的,如果我們不能使用查詢字符串的所有

+0

如何使用JSON格式的數據Ajax post到控制器? – hardywang 2013-02-15 17:14:08

回答

2

答案很簡單:。使用後一種形式或一個AJAX調用將值作爲POST數據發送,並且具有與現有名稱相同的控制器方法,但標記爲[HttpPost]屬性(另外,標記exis一個爲[HttpGet])。這種新的POST方法的參數可以是任何你喜歡的;他們可能會變成字符串,當他們被張貼(特別是如果您使用AJAX),但MVC足夠聰明,可以將它們轉換回來,只要它們的名字相同。所以,這就是像這樣的一種形式:

@using (Html.BeginForm("Edit", "User", FormMethod.Post, new { id = "mainForm" })) 
{ 
    <input id="userId" type="text" /> 
    <input type="submit" /> 
} 

將整齊地對應於這樣的控制器方法:

[HttpPost] 
public ActionResult Edit(int userId) 
{ 
    //do whatever 
} 

前提是你已經有了正確註冊的路由。如果你的GET方法正在工作,那麼只要它沒有對URL參數產生任何問題,那麼相同的路由就可以在這裏工作。

這同樣的方法也將接受來自AJAX調用,看起來像這樣的提交:

$.ajax({ 
    type: "POST", 
    url: '@Url.Action("Edit", "User")', 
    data: { userId: @user.Id }, 
    success: function (data) { 
     //do whatever 
    } 
}); 
1

我與阿那克西曼德同意,但如果你要那麼多的努力,確保查詢字符串信息,表單只是將信息移動到HTML字段而不是查詢字符串參數。如果您需要保留現有的實現,您可以考慮繼承默認的ModelBinder,並提供您自己的自定義實現,以便在將其交給基類的實現之前,將其從加密的查詢字符串轉換爲未加密的查詢字符串。

相關問題