0

ここKnockout MVCからノックアウトを自分のウェブサイトに統合するために使用していますが、問題があります。モデルに別のオブジェクトが含まれている場合、バインディングは失敗します。たとえば、ここに私のモデルがあります:

public class HelloWorldModel
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    [Computed]
    public string FullName
    {
        get { return FirstName + " " + LastName; }
    }

    public ProductModel ProductModel { get; set; }
}

そして、これが私のものですProductModel

public class ProductModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public decimal Price { get; set; }
    public int CategoryId { get; set; }
    public bool IsActive { get; set; }
}

これらのモデルはテスト用であるため、非常に単純です。表示するビューは次のとおりです。

@using PerpetuumSoft.Knockout
@model MyStore.UI.Models.HelloWorldModel

@{
    ViewBag.Title = "HelloWorld";
    var ko = Html.CreateKnockoutContext();
}

<p>
    Name: @ko.Html.TextBox(x => x.ProductModel.Name)
</p>
<p>
    Price: @ko.Html.TextBox(x => x.ProductModel.Price)
</p>
<h2>
    Product @ko.Html.Span(x => x.ProductModel.Name), @ko.Html.Span(x => x.ProductModel.Price)
</h2>

<p>First name: @ko.Html.TextBox(m => m.FirstName)</p>
<p>Last name: @ko.Html.TextBox(m => m.LastName)</p>
<h2>Hello, @ko.Html.Span(m => m.FullName)!</h2>

@ko.Apply(Model)

しかし、それは失敗しました。何も表示されませんでした。<input/>は空白<span>です。ここで何が間違っているのですか?コンテキストのバインドに何か問題があると思います。私を助けてください。どうもありがとう。

編集済み!以下は、自動生成された HTML の一部です。

バインディング:

Name: <input data-bind="value : ProductModel().Name" />

ビュー モデル:

var viewModelJs = {"FirstName":"AAA","LastName":"BBB","FullName":"AAA BBB","ProductModel":{"Id":0,"Name":"Coca Cola","Price":123.0,"CategoryId":0,"IsActive":false}};
4

1 に答える 1

1

nemesvさんのコメントのおかげで、解決策が見つかりました。ネストされたオブジェクトにアクセスするには、バインディングProductを使用します。Withビューのコードは次のとおりです。

@using (var product = ko.With(x => x.ProductModel))
{
    <p>
        Name: @product.Html.TextBox(x => x.Name)
    </p>
    <p>
        Price: @product.Html.TextBox(x => x.Price)
    </p>
    <h2>
        Product @product.Html.Span(x => x.Name), @product.Html.Span(x => x.Price)
    </h2>
}

<p>First name: @ko.Html.TextBox(m => m.FirstName)</p>
<p>Last name: @ko.Html.TextBox(m => m.LastName)</p>
<h2>Hello, @ko.Html.Span(m => m.FullName)!</h2>
于 2013-07-29T09:21:13.123 に答える