如何将部分剃刀页面加载到剃刀视图中

时间:2017-11-12 01:46:27

标签: asp.net-mvc razor asp.net-core-mvc asp.net-core-2.0 razor-pages

我正在尝试用剃刀页面替换我的视图组件,但似乎无法加载部分剃刀页面,因为预计会传递模型但是我理解剃刀的模型页面应该在OnGetAsync方法中声明。这是我的代码......

Razor Page

@page "{id:int}"
@model _BackgroundModel

<form method="POST">
    <div>Name: <input asp-for="Description" /></div>
    <input type="submit" />
</form>

Razor Page Code-Behind

public class _BackgroundModel : PageModel
{
    private readonly IDataClient _dataClient;

    public _BackgroundModel(IDataClient dataClient)
    {
        _dataClient = dataClient;
    }

    [BindProperty]
    public BackgroundDataModel Background { get; set; }

    public async Task OnGetAsync(int id)
    {
        Background = await _dataClient.GetBackground(id);
    }

    public async Task OnPostAsync()
    {
        if (ModelState.IsValid)
        {
            await _dataClient.PostBackground(Background);
        }
    }

}

Razor查看

<div class="tab-pane fade" id="client-background-tab">
    <div class="row">
        <div class="col-sm-12">
            @await Html.PartialAsync("/Pages/Client/_Background.cshtml", new { id = 1 })
        </div>
    </div>
</div>

页面加载错误

  

InvalidOperationException:传递给的模型项   ViewDataDictionary的类型为&#39;&lt;&gt; f__AnonymousType0`1 [System.Int32]&#39;,   但是这个ViewDataDictionary实例需要一个类型的模型项   &#39; WebApp.Pages.Client._BackgroundModel&#39;

在此示例中(根据其文档中的MS推荐方法),模型在OnGetAsync方法中设置,该方法应在请求页面时运行。我也尝试过@await Html.RenderPartialAsync(&#34; /Pages/Client/_Background.cshtml" ;, new {id = 1}),但错误结果相同。

如何将剃刀页面加载到现有视图中?

1 个答案:

答案 0 :(得分:0)

Microsoft确认无法实现此功能,因此剃须刀页面不能用作视图组件的替代品。

查看他们文档的评论......

MS docs

  

@RickAndMSFT版主15小时前   @OjM您可以重定向到该页面,或者您可以将核心视图&gt;代码转换为部分代码并从两者中调用它。

     

页面不能替代部分或视图组件。