无法获得tinyMCE textarea在MVC3中验证

时间:2013-03-15 16:44:08

标签: asp.net-mvc-3 validation tinymce

我在视图中有三个部分视图通过单选按钮选择切换。每个局部视图都有自己的提交输入,两个局部视图包含一个tinyMCE textarea。当我只有一个包含一个tinyMCE textarea的部分时,我能够使用.triggerSave()来验证textarea,但是现在我已经添加了第二个tinyMCE textarea,我无法通过其中的任何一个tinyMCE textareas验证

我在SO上尝试了类似问题上找到的许多解决方案,但我没有成功通过验证来获得这些textareas。

这是第一部分的tinyMCE相关代码:

<script type="text/javascript">
$(document).ready(function () {
    tinyMCE.init({
        mode: "specific_textareas",
        editor_selector: "mceEditorForAddRow",
        theme: "simple",
        width: "500",
        height: "300"
    });
});

 @using(Html.BeginForm("_AddSchemaRow","Database_Schema")
{
@Html.ValidationSummary(true)
    <script type="text/javascript">
    $("#CreateRow").click(function () {
        tinyMCE.triggerSave();
    });
</script>
<table>
....
....
            <tr>
            <td>
                @Html.LabelFor(model => model.SchemaElement)
            </td>
            <td>
                @Html.TextAreaFor(model => model.SchemaElement, new { @class = "mceEditorForAddRow" })
                @Html.ValidationMessageFor(model => model.SchemaElement)
            </td>
        </tr>
....
....
</table>
<p>
        <input id="CreateRow" type="submit" value="Create" />
    </p>
}

以下是控制器针对此第一部分的动作:

        public ActionResult _AddSchemaRow(int id)
    {
        SchemaRow schemaRow = new SchemaRow();
        schemaRow.DatabaseSchemaID = id;
        schemaRow.SchemaIndex = DatabaseSchema.GetSchemaHeadersByDatabaseSchemaID(id).Count() + 1;
        return PartialView(schemaRow);
    }

以下是控制器对此第一部分的POST操作:

        [HttpPost]
    [ValidateInput(false)]
    public ActionResult _AddSchemaRow(SchemaRow schemaRow)
    {
        if (ModelState.IsValid)
        {
            DatabaseSchemaViewModel vm = new DatabaseSchemaViewModel(DatabaseSchema.GetDatabaseSchemaByID(schemaRow.DatabaseSchemaID));
            vm.SchemaRowsAndHeaders = DatabaseSchemaViewModel.GetSchemaRowsAndHeadersBySchemaID(schemaRow.DatabaseSchemaID);
            if (SchemaRow.Create_SchemaRow(schemaRow))
            {
                return RedirectToAction("Edit", new { id = schemaRow.DatabaseSchemaID });
            }
            else
                return PartialView(schemaRow);
        }
        else
            return PartialView(schemaRow);
    }

第二部分的设置与上面的第一部分一样,除了在所有适用的字段中包含“SchemaHeader”而不是“SchemaRow”,包括提交输入id为“CreateSchemaHeader”。我认为示例代码应该提供我的问题的足够描述。如果需要,我可以添加其他部分代码。提前感谢您寻求解决方案的任何帮助。

1 个答案:

答案 0 :(得分:0)

我终于弄清楚了。解决方案是在输入导致回发的输入后添加click函数。

示例:

<p>
    <input id="CreateRow" type="submit" value="Create" />
</p>
    <script type="text/javascript">
        $("#CreateRow").click(function () {
            tinyMCE.triggerSave();
        });
    </script>