2012-05-08 33 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