部分视图表单验证,然后在 MVC3 中调用控制器方法

本文关键字:MVC3 调用 控制器 方法 然后 视图 表单 验证 | 更新日期: 2023-09-27 18:33:27

我对MVC3很陌生,并且在理解事情时遇到了问题。现在我有一个部分视图,我在下面简化了:

@model blah.blah.blah.blah.ForumPost
@using (Html.BeginForm()) {
<fieldset>
    <legend>ForumPost</legend>
    <div class="editor-label">
        @Html.LabelFor(model => model.ForumID)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.ForumID)
        @Html.ValidationMessageFor(model => model.ForumID)
    </div>
    <p>
        <input type="submit" value="Create" />
        @Html.ValidationSummary(true)
    </p>
</fieldset>
<div>
    @Html.ActionLink("Back to List", "Index")
</div>
}

我不是表单验证该怎么做。我一直在尝试使用 jquery 验证,但我似乎找不到适合我正在做的事情的好例子,只是迷路了。我在这里基于这个例子,但这还不够。

完成后,我想在某些代码中调用一个方法,但我不确定是否有一种干净的方法来执行此操作。我目前的工作方式是使用 ajax 调用,它真的很丑陋。还有一位同事建议我将该方法传递给实际的论坛帖子,但我不知道如何。我要调用的方法的代码如下:

public void PostToForum(ForumPost post)
{
    UserService cu = new UserService();
    int PostUserID = cu.GetUserIDByUsername(base.User.Identity.Name);
    if (this.ModelState.IsValid)
    {
        ForumPost nfp = service.CreateForumPost(post);
    }
}

有人有一些提示吗?谢谢。

如有必要,我可以提供更多代码。

部分视图表单验证,然后在 MVC3 中调用控制器方法

HTML 表单通常提交给控制器操作:

[HttpPost]
public ActionResult Create(ForumPost model)
{
    if (!ModelState.IsValid)
    {
        // validation failed => redisplay the view so that the user can fix the errors
        return View(model);
    }
    // at this stage the model is valid => process it:
    service.CreateForumPost(model);
    return ...
}

现在,由于这是一个部分视图,因此您必须小心从此控制器操作返回的视图以及模型。如果不使用 AJAX,则应返回整个父视图和父视图模型。如果使用AjaxForm,则只能使用部分模型和视图。同样在这种情况下,如果成功,您可以向视图返回 Json 结果以指示此成功,以便将要执行的 javascript 处理程序可以执行相应的操作。