shuhelohelo’s blog

Xamarin.Forms多めです.

【Razor Pages】複雑なオブジェクトのGetリクエストのバインドはどうなる?

以下のようなオブジェクトがあったとして、

    public class MyClass
    {
        public string Message { get; set; }
    }

このようにBindPropertyを使ってGetリクエストでクライアントからデータを受け取る場合、

        [BindProperty(SupportsGet = true)]
        public MyClass MyClass { get; set; }
<p>
    @Model.MyClass.Message
</p>
<p>
    <form>
        <p>
            Message: <input asp-for="@Model.MyClass.Message" />
            <button type="submit">送信</button>
        </p>
    </form>
</p>

そのときのクエリ文字列はどうなるのか、という確認です。

結論としては以下のようにデータをプロパティで受け取ることができ、

その際のクエリ文字列は以下のようになります。

このようにC#でオブジェクトのメンバーにアクセスするときと同じ表記で「.」で区切って対象のプロパティが指定されるということですね。

?MyClass.Message=hello

おまけで、ではさらに深い階層のプロパティの場合のクエリ文字列はどうなるかというと。

    public class MyClass
    {
        public string Message { get; set; }
        public MyClass2 MyClass2 { get; set; }

        public MyClass()
        {
            MyClass2 = new MyClass2();
        }
    }

    public class MyClass2
    {
        public string Message { get; set; }
    }
<p>
    <form>
        <p>
            Message: <input asp-for="@Model.MyClass.MyClass2.Message" />
            <button type="submit">送信</button>
        </p>
    </form>
</p>

こうなります。まあ、ですよね。

?MyClass.MyClass2.Message=hello