在没有模型的情况下在MVC中抛出验证错误

时间:2015-06-18 15:37:26

标签: 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(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>
}

这是我的控制器代码:

[HttpPost]
public ActionResult EditUserTicket(Guid id, string Note)
{
    if (Note != "")
    {
        AddTicketNote(Guid.Parse(Session["LoggedUserID"] as string), id, Note, true);  
    }

    return RedirectToAction("EditUserTicket", id);
}

2 个答案:

答案 0 :(得分:0)

有几种方法可以实现这一目标。 这就是我要做的事情:

查看:

@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);
    }

然后在EditUserTicket ActionMethod中检查TempData["NoteError"]是否为空并检查值。如果它不为空且为真,那么该注释为空。

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

答案 1 :(得分:-1)

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

确保在 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 中忘记要显示错误的每个字段