2011-07-07 17 views
19

私はAjaxリクエストの一部として部分ビューをレンダリングしています。私はビューからの部分図呼び出すとASP.NET MVC3はController.PartialViewを呼び出すときにHtmlFieldPrefixを追加します

int i=0; 
foreach(var rule in Model.Rules) { 
    @Html.Partial("ValidationRuleRow", rule, new ViewDataDictionary { 
     TemplateInfo = new System.Web.Mvc.TemplateInfo { HtmlFieldPrefix = string.Format("Rules[{0}]", i) } }) 
    i++; 
} 

を私は、適切なモデルを結合可能にするためにHtmlFieldPrefixを設定することができています。

私は、ユーザーは次のように、AJAXを経由してその場で新しいValidationRuleRowを追加できるようにしたい:だから私はHTMLを取得するために私のコントローラ内のアクションを持って

$.ajax({ 
    type: "GET", 
    url: "/Monitors/NewMonitorValidationRule", 
    success: function (data, textStatus, jqXHR) { 
     var element = $(data); 
     $("#ValidationRuleContainer").append(element); 
    } 
}); 

public ActionResult NewMonitorValidationRule() 
{ 
    ValidationRule rule = new ValidationRule{Id = TempSurrogateKey.Next}; 
    var view = PartialView("ValidationRuleRow", rule); 
    // CODE TO SET PartialView field prefix 
    return view; 
} 

返されるHTMLには接頭辞がありません。コントローラ内のアクションからPartialViewを呼び出すときに接頭辞を設定する必要はありますか? 、さらに良い

@{ 
    if (!string.IsNullOrEmpty(Model.MyPrefix)) 
    { 
     ViewData.TemplateInfo.HtmlFieldPrefix = Model.MyPrefix; 
    } 
} 

答えて

20

:接頭辞を設定するには、このビューモデルプロパティ

public ActionResult NewMonitorValidationRule() 
{ 
    ValidationRule rule = new ValidationRule{Id = TempSurrogateKey.Next}; 
    // CODE TO SET PartialView field prefix 
    rule.MyPrefix = "Rule[153]"; 
    return PartialView("ValidationRuleRow", rule); 
} 

と部分図ValidationRuleRow.cshtml利用内側:

+2

あなたには、うまく演奏されたその賞金があります。 –

+1

ありがとう、たくさんの私を驚かされてキャッチ::) –

+0

時々入力 'id属性'はレンダリングされません... [私の質問を参照してください](http://stackoverflow.com/questions/38638451/aspnet-mvc-5 -html-helper-action-method-view-results-input-id-missing-sometimes) – ooXei1sh

18

あなたが一緒にビューモデルの一部としてこの情報を渡すことができますコントローラーのアクション内でViewData.TemplateInfo.HtmlFieldPrefixを設定することができます。

public Actionresult MyAction() 
{ 
    ... 
    ViewData.TemplateInfo.HtmlFieldPrefix = "MyPrefix"; 

    return PartialView("MyView", viewmodel); 
} 

ViewBagやビューモデルのプロパティは必要ありません。

+0

いいえ、お電話ください。 ViewBagをViewモデルに追加するのではなく、ViewBagを使用して終了しましたが、この回避策で十分です。ありがとう。 –

+0

ありがとう、それは仕事です! ;) –

関連する問題