如何提交一个字段在一个隐藏的对话框在MVC 3

本文关键字:一个 对话框 MVC 隐藏 何提交 字段 提交 | 更新日期: 2023-09-27 18:15:06

我在强类型视图中有一个MVC 3表单,其中一个我需要提交的字段是在jQuery对话框中。我还没有能够得到这个字段是提交的POST参数的一部分。为什么,为什么?

视图:

@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开发视图的网络选项卡中检查),除非我将其从对话框中取出。结果是,在PostDialogField操作dfm。message包含"Default"字符串,即使我已经更改了对话框中的消息。

我知道我可以在表单中添加一个隐藏字段,与对话框中的字段保持同步,但我觉得我错过了一些东西。有什么想法吗?

如何提交一个字段在一个隐藏的对话框在MVC 3

您的问题是,您转换为对话框的元素被移出表单,移到DOM底部的新对话框元素。由于它不再是表单的一部分,因此在提交表单时它将不会被提交。

如果你在关闭对话框时破坏它,它会被移回原来的位置,但我看不出这是否是你想要的。另一个选择是同步元素。