我已将此编辑为更加简洁明了,因为昨天我对失败的那一天感到有点沮丧。
我将选择列表(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);
}
答案 0 :(得分:0)
我可以看到您的代码中存在许多错误:
还有一件事......尝试使用ajax调用发送数据,而不是发布表单。这样,您可以在viewmodel中创建方法并将SelectedPolicyPlan值发布到服务器,然后您可以重定向到查看。