PartialView表单验证然后在MVC3中调用控制器方法

时间:2012-05-08 15:11:51

标签: c# asp.net-mvc-3 forms validation

我对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验证,但我似乎无法找到一个适合我正在做的事情并且迷路的好例子。我基于这个例子here,但这还不够。

在我完成之后,我想在某些代码中调用一个方法,但我并不确定这样做的干净方法。我现在使用它的方式是使用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);
    }
}

任何人都有一些提示吗?感谢。

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

1 个答案:

答案 0 :(得分:2)

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处理程序可以采取相应的操作。