我在强类型视图中获得了MVC 3表单,其中我需要提交的字段之一是在jQuery对话框中。我无法将此字段作为提交的POST参数的一部分。为什么哦为什么?如何在MVC中的隐藏对话框中提交一个字段3
观:
@model My.Models.DialogFieldModel
@{
ViewBag.Title = "Index";
}
<script type="text/javascript">
$(document).ready(function() {
$('#aDialog').dialog({
autoOpen: true,
height: 250, width: 400,
modal: true,
buttons: {
"Ok!": function() {
$(this).dialog("close");
}
}
});
});
</script>
<h2>Index</h2>
@using (Html.BeginForm("PostDialogField", "DialogField"))
{
@Html.ValidationSummary(true)
<fieldset>
@Html.HiddenFor(m => m.ID)
@Html.DisplayFor(m => m.message)
<div id="aDialog">
<h3>Fill in this message!</h3>
<div class="editor-field">
@Html.EditorFor(m => m.message)
</div>
</div>
<p><input type="submit" value="Submit Message" /></p>
</fieldset>
}
模型:
using System;
namespace My.Models
{
public class DialogFieldModel
{
public int ID { get; set; }
public String message { get; set; }
public DialogFieldModel()
{
message = "Default";
}
}
}
控制器:
using System;
using System.Web;
using System.Web.Mvc;
using WellTrkd.Models;
namespace My.Controllers
{
public class DialogFieldController : Controller
{
public ActionResult Index()
{
DialogFieldModel dfm = new DialogFieldModel(); // set default message
return View(dfm);
}
[HttpPost]
public ActionResult PostDialogField(DialogFieldModel dfm)
{
String message = dfm.message;
if (message != "Default")
//Yay!
return RedirectToAction("Index");
else // Boo
return RedirectToAction("Index");
}
}
}
不幸的是,除非我将它从对话框中取出,否则绝不会将#message字段与HTML POST参数的其余部分(在chrome dev视图的网络选项卡中选中)一起提交。结果是在PostDialogField操作中,即使我在对话框中更改了消息,dfm.message也包含“默认”字符串。
我知道我可以将隐藏字段添加到与对话框中的字段保持同步的窗体,但我觉得我错过了一些东西。任何想法哦明智的?
什么类型是消息字段?一个布尔? – Dallas
如果你使用的是强类型视图,你确定'ID'被填充,因为它听起来像一个创建视图,当你插入一个新记录时'ID'将是空的 – Rafay
@达拉斯我编辑我的问题来指定消息字段是相应模型中的字符串。我希望将该字段标记为Datatype.MultilineText并将其显示为textarea。 –