Я пытаюсь отправить значение выбранного переключателя на контроллер после нажатия кнопки в приложении MVC4 RAZOR. Однако я не возвращаю реальное ожидаемое значение в контроллере, только 0.
Код частичного просмотра:
@model Blah.FeatureViewModel
<script type="text/javascript">
function OnContinueClick() {
$('#tabs').load('@Url.Action("Continue", "Home")', { SelectedFeature : Model.SelectedFeature });
}
</script>
@using (Html.BeginForm())
{
<div>
@foreach (var feature in Model.FeatureDictionary)
{
<p>
@Html.RadioButtonFor(x => x.SelectedFeature, feature) @feature.Value
</p>
}
<input type="button" name="continueButton" id="continueButton" value="Continue" onclick="OnContinueClick()" />
</div>
}
Просмотреть код модели:
using System.Collections.Generic;
namespace Blah.Models
{
public class FeatureViewModel
{
public Dictionary<int, string> FeatureDictionary { get; set; }
public KeyValuePair<int, string> SelectedFeature { get; set; }
}
}
Код контроллера:
[HttpPost]
public ActionResult Continue(FeatureViewModel featureViewModel)
{
//pass data to another controller
}
Думаю, мне может понадобиться JQuery, чтобы вернуть стоимость?
Значение, которое вы передаете функции load
jQuery, является значением Модели во время визуализации представления. Чтобы передать текущее выбранное значение, вам нужно что-то вроде:
$('#tabs').load('@Url.Action("Continue", "Home")',
{ SelectedFeature : $('[name="SelectedFeature"]').val() });
Также, как сказал Джоэл Эфиртон, вам нужно изменить тип вашего действия с FeatureViewModel
на FeatureViewModel
KeyValuePair<int, string>
.
я не уверен
@Html.RadioButtonFor(x => x.SelectedFeature, feature)
дает вам желание, которого вы хотите либо потому, что функция KeyValuePair<int, string>
. Что вы пытаетесь создать радиокнопку точно?
int
я полагаю.