簡體   English   中英

ASP.NET MVC應用程序的處理參數

[英]Handling Parameters of ASP.NET MVC Application

我正在研究我們公司的ASP.NET MVC 4項目。 它是基於收入的應用程序,它在應用程序的每個控制器和操作處都有一些過濾器,它們像某些過濾器一樣是Year和Quarter。 對於這些過濾器更改,我使用了Create Base Model(它包含這些過濾器值),並且所有其他模型都繼承自此Base Model.Base Model用於@layout視圖。 過濾器的每次更改都應更新視圖。 布局視圖中的基本模型是這樣的

public class BaseModel
{
 public string YearSelected{ get; set;}
 public string QuarterSelected{ get; set;}
}

和其他模型都從此BaseModel繼承

public class RevenueModel:BaseModel
{
 // other stuff
}


對於所有這些事情,我正在通過參數發送。似乎像現在這樣參數是增加需求是更改以添加更多參數
1.我想知道處理正確的方法,如果方法不足,建議我處理此參數更改的最佳方法。

2.在UI(視圖)中,
當用戶通過單選按鈕更改視圖並單擊“應用過濾器”按鈕時,我正在使用jquery來處理此問題,

window.href='Url Action with new Parameters';
window.href='@Url.Action("SomeAction","Controller",new{ // those all parameters } ';

當單擊按鈕window.href將自動調用並更新我想知道的視圖
這種方法健壯嗎? 建議我處理這種情況的最佳方法。

“如果我使用jquery來調用操作並為調用控制器操作使用大量參數,那么我就需要一個答案”

您正在執行的操作是可行的,但是正如@ ps2goat指出的那樣,如果URL中的GET參數過多,則會遇到問題。

但是正確的答案取決於如何使用過濾器。 用戶會經常更換過濾器還是很少更換過濾器? 如果希望用戶瀏覽您的應用程序並且僅很少更改過濾器,我建議您使用另一種方法,而不是將參數作為GET參數包含在URL中,因為:

  1. 正如@ ps2goat指出的那樣,如果URL的總長度太長,可能會遇到問題。
  2. 您可能會遇到用戶體驗問題。 如果用戶為頁面添加了書簽,然后稍后更改其過濾器,並使用該書簽返回到較早的頁面,則將恢復其過濾器,這可能與他的預期不符。
  3. 看起來不會很漂亮。 您網站上的所有url看起來都類似於/controller/action/?YearSelected=2014&QuarterSelected=1&Parameter3=2&Parameter4=8 ,這也可能會產生您需要解決的SEO問題。

在這種情況下,建議您考慮使用Cookie或將用戶的過濾器保存在服務器上。 (但最好不在會話中,因為那樣會為您的應用程序帶來可伸縮性問題)。 如果您使用Cookie,則用戶的過濾器將可自動用於每個請求的Controller Action,因為cookie將與每個請求一起發送。 (考慮使用哪種策略時,當然也要牢記這一點。如果您有很多cookie數據,這將減慢應用程序的感知響應速度,因為cookie數據必須與每個請求一起發送給您的服務器。因此,請保持您的Cookie數據盡可能小)

另一方面,如果您希望用戶經常甚至在同一頁面上多次更改過濾器,則可以考慮使用jQuery對MVC控制器進行異步POST,使用JSON檢索必要的數據,並更新視圖。 實際上,這並不像聽起來那樣困難。

實現它所需要做的是在頁面上創建一個Javascript函數,該函數將參數提交給控制器操作。 您也可以將數據作為JSON發送到控制器操作。 這樣的事情可能會起作用:( 未經測試的代碼

<script>
    function submitFilters() {
        var parameters = {
            parameter1: $('#parameter1').val(),
            parameter2: $('#parameter2').val(),
            ...
        };
        $.ajax('@Url.Action("SomeController", "SomeAction")', {
            contentType: 'application/json',
            data: JSON.stringify(parameters),
            success: function(data) {
                alert('Received data back from server. Ready to update the view.');
            }
        };
    }
</script>

然后,您將掛接過濾器(單選按鈕,下拉列表等)以調用方法submitFilters

只要屬性名稱匹配,MVC就會自動將從客戶端接收到的JSON數據轉換為C#ViewModel。 然后,您可以在服務器上執行所需的任何查詢和篩選,然后將數據作為操作的結果發送回去。 偽代碼

public ActionResult SomeAction(MyViewModel vm)
{
    var data = SomeRepository.GetData(vm.Parameter1, vm.Parameter2, ...);
    return Json(data);
}

然后,您只需要在接收到數據時更新視圖。 您最好為此使用模板引擎,但是當然不是必需的。

這只是如何做到的粗略示例。 通常,我會創建一個Knockout視圖模型來封裝所有視圖。 但這應該可以幫助您入門。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM