2012-05-08 36 views
1

到MVC3控制器方法我很新,并具有环绕我周围的事物头的问题。现在我有一个局部视图,我简化如下:PartialView表单验证,然后调用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); 
    } 
} 

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

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

+0

没有在MVC3 –

+0

“后面的代码” @TetsujinnoOni遗憾,就像我说我很新的MVC3,我不知道该怎么称呼它。 – yaegerbomb

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

+0

html表单如何知道调用此方法? – yaegerbomb

+1

这是给你指明此生成表单时:'@using(Html.BeginForm( “ActionName”, “ControllerName”))'。如果你不这样做(在你的代码'@using(Html.BeginForm())'),会被调用控制器动作必须具有相同的名称是用来显示这个表单的不同之处在于控制器操作它必须用HttpPost属性装饰。因此,例如,如果您的视图是使用Create控制器操作('/ somecontroller/create')呈现的,那么如果您在生成表单时未指定操作,则在您提交时将调用Create POST控制器操作。 –

+0

啊好的。我明白。显然在这个项目中没有任何验证已经开始,这就是为什么我已经完全失去了。许多事情都是混乱的等等。从现在开始,我看到了什么正在通过等等,这使得更多更多。谢谢! – yaegerbomb