C# 在没有模型的MVC中抛出验证错误

C# 在没有模型的MVC中抛出验证错误,c#,asp.net-mvc,validation,view,controller,C#,Asp.net Mvc,Validation,View,Controller,我有一个视图是强类型的一个模型,但有一个表单可以发布到另一个模型。当用户留下一张空白的便笺但无法识别时,我需要发送一个验证错误。以下是视图中的表单: @using (Html.BeginForm()) { @Html.AntiForgeryToken() <div class="col-md-12 col-xs-12"> <div class="form-group"> @*@Html.HiddenFor(mode

我有一个视图是强类型的一个模型,但有一个表单可以发布到另一个模型。当用户留下一张空白的便笺但无法识别时,我需要发送一个验证错误。以下是视图中的表单:

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

    <div class="col-md-12 col-xs-12">
        <div class="form-group">
            @*@Html.HiddenFor(model => model.TicketId)*@
            @Html.Label("New Note", new { @class = "control-label" })
            @Html.TextArea("Note", new { cols = 600, @rows = 5 })
        </div>

        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Add" class="btn btn-default" />
            </div>
        </div>
    </div>
}

有几种方法可以实现这一点。 这就是我要做的:

视图:

然后在EditUserTicket ActionMethod中检查TempData[NoteError]是否为null,并检查值。如果不是null和true,则说明为空


在我看来,您不应该只做客户端或服务器端。如果要进行验证,则应该在客户端和服务器上进行验证

您始终可以使用asp.net mvc附带的客户端jquery进行验证

确保BundleConfig.cs jquery.validate中包含并在布局中调用捆绑包

那么在你看来,

    $("#myForm").submit(function (e) {
        e.preventDefault();
        var validator = $("#myForm").validate().form();
        if (validator) {
                //do something you can alway send to server and do another validation
        }
    });

不要忘了在您的表单中@Html.ValidationMessage,对于您希望出现错误的每个字段

,如果可能的话,我建议您强烈地键入它以完全避免出现这种情况。只需创建一个NoteViewModel并将其实例添加到父级拥有的任何模型中。然后只需使用一个必需的属性和ValidationMessage即可获得一个简单的解决方案。@br4d这是我正在创建的帮助台软件。上面我没有这样做的原因是附加到视图强类型模型的票证表。然后在表格下面是附在这张票上的所有注释的列表。这种形式在中间是这样用户可以添加一个新的票据到票。有没有一种方法可以让我在视图模型上做到这一点?@djblois提供了我的答案帮助?是的,我想是的,Jamie,我正在努力。如果他愿意,你不读我代码中的引用吗?他总是可以将ajax发送回服务器并进行另一次验证
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()

<div class="col-md-12 col-xs-12">
    <div class="form-group">
        @*@Html.HiddenFor(model => model.TicketId)*@
        @Html.Label("New Note", new { @class = "control-label" })
        @Html.TextArea("Note", new { cols = 600, @rows = 5, id = "noteArea" })
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input id="submitBtn" type="submit" value="Add" class="btn btn-default" />
        </div>
    </div>
</div>
}
<script>
$(function() {

    $('#submitBtn').click(function (e) {
        if($('#noteArea').val() == "")
        {
           e.preventDefault();
           alert("Please enter a note"); //You could append some HTML somewhere (I dont like alerts)
        }
    });  
});
</script>
[HttpPost]
    public ActionResult EditUserTicket(Guid id, string Note)
    {
        if (Note != "")
        {
            AddTicketNote(Guid.Parse(Session["LoggedUserID"] as string), id, Note, true);  
        }
        TempData["NoteError"] = true;
        return RedirectToAction("EditUserTicket", id);
    }
    $("#myForm").submit(function (e) {
        e.preventDefault();
        var validator = $("#myForm").validate().form();
        if (validator) {
                //do something you can alway send to server and do another validation
        }
    });