4

私はumbraco 7 mvcを使用しています

umbraco フィールドを部分ビューでレンダリングしたいだけです。それを行う方法がわかりません。@CurrentPage または @Umbraco.Field または RenderMacro などが機能しない

次の部分的なビューがあります

@model MvcImport.Models.ImportModel
@{
    var formSent = false;
    var success = TempData["Success"];
    if (success != null)
    {
        bool.TryParse(success.ToString(), out formSent);
    }
}

<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@if (formSent)
{

    <p>Thanks, we'll get back to you soon!</p>
}
else
{
    using (Html.BeginUmbracoForm<MvcImport.Controllers.ImportController>("ImportExcel", FormMethod.Post, new { enctype = "multipart/form-data" }))
    {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true)

        <div>

            @Html.LabelFor(x => x.FileUpload)
            @Html.TextBoxFor(x => x.FileUpload, new { type = "file", name = "Files" })
            @Html.ValidationMessageFor(x => x.FileUpload)

        </div>
        <div>

            @Html.LabelFor(model => model.FileType)<br />
            @Html.DropDownListFor(model => model.FileType, Model.FileTypes)
            @Html.ValidationMessageFor(x => x.FileType)

        </div>
        <input type="submit" value="Submit" class="btn-submit" />
    }
}

単純に交換したい

<p>Thanks, we'll get back to you soon!</p>

現在のページフィールドで。

@currentPage.thankYouCopy

また

@Umbraco.Field("thankYouCopy")

どうやってするの?

私はこれで私のメインビューでパーシャルを呼び出しています:

@Html.Partial("Import", new MvcImport.Models.ImportModel { FileTypes = fileTypes })

ありがとう

4

2 に答える 2

4

ここでいくつかのことが混同されています。Umbraco ノードからデータを取得しようとしているときに、カスタム モデルがあります。

カスタム モデルを使用してビューに渡しています。@c0r3yz のように、ビューに渡されるモデルを変更できます。RenderMvcControllerまたはSurfaceControllerがある場合、これは良い考えかもしれません。

現在のコントローラー (これが何であれ) に満足している場合は、 do を使用して必要な@Model.MyPropertyName値を表示できます。umbraco 機能 (現在のノードなど) が必要ない場合は、これで問題ありません。

あなたが言及するすべてのフィールド取得オプションは互いに似ています。それらが行うことは、現在のノードの情報を取得することです。カスタム モデルを使用しているため、前述のように umbraco ベースクラスからカスタム モデルを継承するまで、それらを使用することはできません。

  • @Umbraco.Field("myfield")正しいフィールドを取得してフォーマットするのに役立つヘルパーメソッドです。これはおそらく初心者にとって最も簡単な解決策です。非常に強力な機能の 1 つは、recursive = true です。詳細については、ドキュメントを参照してください。
  • @CurrentPage.myFieldフィールドの値を返します (ダイナミクスを使用)。これは簡単に記述できますが、予期しない状況に陥ることがあります。
  • @Umbraco.Content.GetPropertyValue("myField")フィールドの値を返します。部分的なものとまったく同じですが、厳密に型指定されたメソッド/オブジェクトを使用 (および返す) します。Visual Studio を使用している場合は、おそらく IntelliSense の部分が気に入るはずです。
  • @Umbraco.Content.GetPropertyValue<ACustomType>("myField")ValuePropertyConvertersを使用してフィールドの値を返します。以前のものを使用し、タイプを指定しない場合は、プロパティ コンバーターも使用されます。ただし、この表記法を使用すると、返される型をもう少し制御できます。

ドキュメントへのリンクをいくつか追加したので、さまざまなオプションに関する詳細情報を参照できます。

于 2014-07-15T08:17:55.283 に答える
4

私はこれをまったくテストしていませんが、これは正しい道をたどるはずです...私が知る限り、あなたはこれを置き換えたいと思っています:

@model MvcImport.Models.ImportModel

これとともに:

@inherits Umbraco.Web.Mvc.UmbracoViewPage<MvcImport.Models.ImportModel>

これにより、UmbracoHelper にアクセスできるようになり、次のようにプロパティにアクセスできるようになります。

@Umbraco.Field("thankYouCopy")
于 2014-07-14T21:28:56.963 に答える