2013-01-11 67 views
2

在我的Orchard實例中,我有一個自定義內容類型。在創建內容類型的實例時,必須將查詢字符串值傳遞給編輯器頁面,以便爲幕後相關模型設置值。Orchard CMS - 在內容項目編輯器中維護查詢字符串值

問題是,一旦命中「保存」或「發佈」,查詢字符串就會丟失。它不在URL中維護,並且對Driver中的查詢字符串的任何引用都返回null。

那麼,有沒有辦法維護查詢字符串的狀態?

代碼示例:

//GET 
protected override DriverResult Editor(PerformerPart part, dynamic shapeHelper) 
{ 
    var workContext = _workContextAccessor.GetContext(); 
    var request = workContext.HttpContext.Request; 
    var id = request.QueryString["id"]; 
} 

最初,「ID」設置爲查詢字符串參數,但回發的查詢字符串返回「空」之後。

注:我正在使用Orchard版本1.6。

+1

沒有,沒有辦法,除非你採取了一切維持查詢字符串的狀態:控制器,表單渲染等等。一個更好的問題就是爲什麼你要在查詢字符串上保留這個問題。爲什麼這不是作爲零件屬性和/或隱藏表單域來維護的?這個ID是什麼? –

回答

1

如果將其保存在隱藏字段中的頁面上,則可以在回發中獲取查詢字符串參數。 如果編輯形狀取決於這個參數,它會有點困難。

司機:

protected override DriverResult Editor(PerformerPart part, dynamic shapeHelper) 
{ 
    return Editor(part, null, shapeHelper); 
} 

司機:

protected override DriverResult Editor(PerformerPart part, IUpdateModel updater, dynamic shapeHelper) 
{ 
    var model = new PerformerPartEditViewModel(); 

    if (updater != null) 
    { 
     if (updater.TryUpdateModel(model, Prefix, null, null)) 
     { 
      // update part 
     } 
    } 
    else 
    { 
     model.StrId = _wca.GetContext().HttpContext.Request.QueryString["id"]; // if you save id in your part that you can also try get it from the part 
    } 

    if (string.IsNullOrEmpty(model.StrId)) 
    { 
     // populate model with empty values 
    } 
    else 
    { 
     // populate model with right values 
    } 

    return ContentShape("Parts_Performer_Edit",() => shapeHelper.EditorTemplate(
      TemplateName: "Parts/Performer", 
      Prefix: Prefix, 
      Model: model 
    )); 
} 

查看

@model Smth.ModuleName.ViewModels.PerformerPartEditViewModel 
@Html.HiddenFor(m => m.StrId) 
相關問題