思考及解決:使用ViewModel時 打開web服務器時 HTTP:404 您正在查找的一個資源或者它依賴項被消除

一、問題

剛打開web服務器時報這個錯誤
這裏寫圖片描述
調試了一下,是在啓動項中有問題。我的routeconfig是:

                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Login", action = "Test", id = UrlParameter.Optional }
            );

使用的是Home下的Test方法。Test如下:

   public ActionResult Test(LoginViewModel model)
        {
            TestFun(model);
            return View(model);
        }

對應的Login.cshtml 文件內容如下:大致內容

@using hust.wlno.QJBZ.Web.ViewModels
@model LoginViewModel

@{
    Layout = null;
}
@using (Html.BeginForm("Test", "Login", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
    @Html.AntiForgeryToken()
    <h4>Reset your password.</h4>
    <hr />
    @Html.ValidationSummary("", new { @class = "text-danger" })
    <div class="form-group">
        @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
        <div class="col-md-10">
            @Html.TextBoxFor(m => m.Email, new { @class = "form-control" })
        </div>
    </div>
}

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}

這時出現另一個問題:
這裏寫圖片描述
看到這個我就明白了,基本上是由於action方法在view中沒有匹配的對象造成的

二、解決

在web服務器啓動時,首先使用控制器中的action方法,然後調用同名的view文件,即我們說的網頁來展現界面。必須要保證action方法的名字和view的名字保持一致,這樣纔可以正常展現。
因此,只要我把action的名字改爲和view對應的就好了,同時routeconfig也要改。
頁面就可以正常顯示了。

三、ViewModel思考

這裏是用ViewModel打開界面的。ViewModel是連接Controller和View的一箇中間模型,控制器對獲取到某個頁面的Model進行後續處理,而View是對ViewModel進一步的渲染,展現頁面。


參考了師兄寫的例子,對於web網站剛啓動時,使用是return View()的方式展現。而又重載了一個參數爲LoginViewModel的函數,用於後續接受該頁面的Model,無論在後臺處理,還是與數據庫內容比較,都是在取得model之後完成的。控制器接受ViewModel的方法是通過HTTPPost的方式:

    [HttpPost]
       [ValidateAntiForgeryToken]//防止CSRF攻擊
       public ActionResult ResetPassword(ResetPasswordViewModel model)
       {
           string str=model.Email;
            model.Code = model.Email;
          // Myfun(model,str);//調用Myfun函數進行相應的處理
           return View(model);
        }

我的理解是,這兩部分別用於不同的情況,用的較多的應該是第二種情況,初始啓動時展現靜態頁面就OK,不需要,也沒有可以接受的ViewModel

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章