我已经阅读了有关此问题的几个问题和答案,但没有一个能让我更接近解决此问题。我的问题是我似乎无法将 RadioButtonFor
检查值保留到后操作方法中。这是很多不相关的东西,所以我会尝试将其归结为相关的问题。
所以我有一个像这样的ViewModel
:
public class QEventHandlerVM
{
//Removed unrelated
public QueueEventHandlerModel QEventHandler { get; set; }
public string SelectedOption { get; set; }
}
编辑 View 的获取方法
。我在此处设置 SelectedOption
,以便我可以在前端使用它。任务是根据 SelectedOption
值显示和隐藏 div。据我所知,这部分正在工作,该值被设置并通过 jQuery 在 View 中使用。
[HttpGet]
public ActionResult Edit(int id)
{
try
{
//Removed unrelated...
QueueEventHandlerModel model;
QEventHandlerVM vm = new QEventHandlerVM();
ApiCommunicator.Get("QueueEventHandlers/" + id, out model);
vm.QEventHandler = model;
if (...)
vm.SelectedOption = "toQueue";
if (...)
vm.SelectedOption = "redirection";
if (...)
vm.SelectedOption = "hangup";
return View(vm);
}
catch (HttpResponseUnsuccessfulException e){...}
}
简化的编辑 View
:
@model Foo.WebSites.Web.Views.QueueEventHandlers.QEventHandlerVM
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
//Unrelated stuff...
@Html.HiddenFor(s => s.SelectedOption)
@Html.RadioButtonFor(s => s.SelectedOption, "toQueue", new { id = "rdToQueue", @class = "q-event" })
<label for="rdToQueue">Transfer call to queue</label>
@Html.RadioButtonFor(s => s.SelectedOption, "redirect", new { id = "rdRedirect", @class = "q-event" })
<label for="rdRedirect">Transfer call to destination</label>
@Html.RadioButtonFor(s => s.SelectedOption, "hangup", new { id = "rdHangup", @class = "q-event" })
<label for="rdHangup">Hangup</label>
<button type="submit" class="btn btn-primary btn-sm">Save</button>
}
Post
方法
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(QEventHandlerVM model, int id)
{
if (!ModelState.IsValid) {... return View(model); }
if (model.SelectedOption == "hangup" || model.SelectedOption == "redirection")
{
model.QEventHandler.QueueId = null;
}
else if (model.SelectedOption == "toQueue")
{
model.QEventHandler.Phrase = string.Empty;
model.QEventHandler.Redirection = string.Empty;
}
else if (model.SelectedOption == "hangup")
{
model.QEventHandler.Redirection = string.Empty;
model.QEventHandler.QueueId = null;
}
try {// Update}
catch (HttpResponseUnsuccessfulException e){...}
}
现在,这里的 SelectedOption
值与 Get
方法中的值相同。我可能错过了一些简单的事情,并且很可能有一些更好的方法来解决这个问题。
提前致谢。
最佳答案
这是因为您的 SelectedOption
属性有一个 HiddenFor
和 关联的编辑字段。只需删除 HiddenFor
即可:
@Html.HiddenFor(s => s.SelectedOption)
关于c# - MVC 5将单选按钮字符串值发送到后操作方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31139373/