Knockout - 字典,使用mvc将键设置为变量值

时间:2013-12-17 15:39:40

标签: javascript asp.net-mvc knockout.js

我已将此编辑为更加简洁明了,因为昨天我对失败的那一天感到有点沮丧。

我将选择列表(type_of_cover)绑定到控制器操作(FetchPolicyPlans),在那里我成功地将字典值绑定到键和值字段。

我的问题在于表单帖子,我只希望将字典Key作为值传递给表单帖子。

**HTML**

<div class="instant-quote-form">
    @using(Html.BeginForm("Index","thank-you-quote", FormMethod.Post, new {@id="instant-quote"}))
    { 
///some more code
<select class="form_details" name="type_of_cover" id="form-type" style="margin-top: -1px;"
                        data-bind="options: PolicyPlans,
                                    optionsValues: 'Key',
                                    optionsText: 'Value',
                                        optionsCaption: '-- Please Select --',
                                        value: SelectedPolicyPlan"></select>


**JS**
function QuoteViewModel() {
var self = this;
self.SelectedPolicyPlan = ko.observable();
self.PolicyPlans = ko.observableArray();

 $.ajax({
        url: '/InstantQuote/FetchPolicyPlans',
        type: 'POST',
        dataType: 'json',
        contentType: 'application/json',
        async: false,
        data: ko.toJSON({ productId: ProductId() }),
        success: function (plans) {                
            self.PolicyPlans(plans);
        },
        error: function () { QuoteError(); }        
    });        
}

ko.applyBindings(new QuoteViewModel());

**Controller**
 public JsonResult FetchPolicyPlans(int productId)
    {
        Constants.ProductTypes productType;
        Enum.TryParse(productId.ToString(), true, out productType);

        KeyValuePair<int, string>[] plans = MvcApplication._vertigoService.FetchApiPolicyPlans(productType);
        return Json(plans);
    }

1 个答案:

答案 0 :(得分:0)

我可以看到您的代码中存在许多错误:

  1. 未定义VehicleMakes。
  2. 什么是自我?试试“var self = this;”在QuoteViewModel的顶部。
  3. 还有一件事......尝试使用ajax调用发送数据,而不是发布表单。这样,您可以在viewmodel中创建方法并将SelectedPolicyPlan值发布到服务器,然后您可以重定向到查看。