更新:私が平野ビューの代わりに部分ビューでViewBag内容を設定しようとしていたようで、MVC3はこれを行うには、それは非常に簡単になります。私はまだ部分的なビューではうまくいかず、なぜビューバックが部分的なビューと共有されていないのかについてはまだ興味があります。レイアウトビューへの部分的なビューからのパスを任意のデータ
私は問題がレイアウトビューで焼成されたときにRenderAssetStyles /スクリプトViewData
にはないということですViewData
/ViewBag
// Used in the partial view
public static void RequireAssets(this HtmlHelper helper, params Asset[] assets)
{
var alreadyRequired = helper.ViewData["RequiredAssets"] as List<Asset>;
if (alreadyRequired == null)
{
alreadyRequired = new List<Asset>();
helper.ViewData.Add("RequiredAssets", alreadyRequired);
}
foreach (var asset in assets.Where(anAsset => !alreadyRequired.Contains(anAsset)))
alreadyRequired.Add(asset);
}
// Used in the layout view
public static MvcHtmlString RenderAssetStyles(this HtmlHelper helper)
{
var requiredAssets = helper.ViewData["RequiredAssets"] as List<Asset>;
return requiredAssets == null ? null : GetStyleSheets(requiredAssets.Select(e => new StyleSheet(e)).ToArray());
}
public static MvcHtmlString RenderAssetScripts(this HtmlHelper helper)
{
var requiredAssets = helper.ViewData["RequiredAssets"] as List<Asset>;
return requiredAssets == null ? null : GetScripts(requiredAssets.Select(e => new Script(e)).ToArray());
}
を使用してレイアウトビューに部分図からいくつかのデータを渡すためにしようとしています
:キー "RequiredAssets"使用
_Layout.cshtmlが含まれています
<title>@ViewBag.Title</title>
@Html.RenderAssetStyles()
PartialView.cshtml:
@{
Html.RequireAssets(Assets.Grid, Assets.FileUpload);
}
私はRequireAssetsヘルパーを壊してから、MvcHtmlStringsのそれぞれを呼び出す順序をチェックしようとします。唯一の「再現」は、RenderAssetStyles/RenderAssetScriptsの後にRequireAssetsが呼び出された場合、必要な呼び出しの前にアセットが設定されていない場合に、.cshtmlですべてを取得することでした。 –
私はビューを部分的にレンダリングしていたようですが、質問を更新しました。 –
http://stackoverflow.com/questions/4974027/modifying-mvc-3-viewbag-in-a-partial-view-does-not-persist-to-the-layout-cshtmlが役立つ可能性があります –