Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 在MVC4中使用敲除MVC将数据与嵌套对象绑定_Asp.net Mvc 4_Knockout.js_Knockout Mvc - Fatal编程技术网

Asp.net mvc 4 在MVC4中使用敲除MVC将数据与嵌套对象绑定

Asp.net mvc 4 在MVC4中使用敲除MVC将数据与嵌套对象绑定,asp.net-mvc-4,knockout.js,knockout-mvc,Asp.net Mvc 4,Knockout.js,Knockout Mvc,我正在使用Knockout MVCfrom将Knockout集成到我的网站,但我有一个问题。如果我的模型包含另一个对象,绑定将不成功。例如,以下是我的模型: public class HelloWorldModel { public string FirstName { get; set; } public string LastName { get; set; } [Computed] public string FullName {

我正在使用
Knockout MVC
from将Knockout集成到我的网站,但我有一个问题。如果我的模型包含另一个对象,绑定将不成功。例如,以下是我的模型:

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)

多亏了nemesv的评论,我找到了解决方案。要访问嵌套对象,这里是
产品
,我们使用
绑定。以下是视图的代码:

@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>
@使用(var product=ko.With(x=>x.ProductModel))
{

名称:@product.Html.TextBox(x=>x.Name)

价格:@product.Html.TextBox(x=>x.Price)

Product@Product.Html.Span(x=>x.Name),@Product.Html.Span(x=>x.Price) } 名字:@ko.Html.TextBox(m=>m.FirstName)

姓氏:@ko.Html.TextBox(m=>m.LastName)

您好,@ko.Html.Span(m=>m.FullName)!
提示一下,淘汰MVC是一个巨大的反模式。不要这样做。它是网络表单的私生子。我们一直在努力摆脱Web表单,KO MVC为我们带来了backBut,但现在,我不得不使用它:(这是一个已知的、可悲的、开放的淘汰MVC库问题,请参见:作为一种解决方法,可以使用with binding:
@using(var subModel=KO.with(m=>m.ProductModel)){@subModel.Html.TextBox(x=>ko.Model..Name)
谢谢你的建议,我找到了解决方案。太好了!让我来回答:)
var viewModelJs = {"FirstName":"AAA","LastName":"BBB","FullName":"AAA BBB","ProductModel":{"Id":0,"Name":"Coca Cola","Price":123.0,"CategoryId":0,"IsActive":false}};
@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>