思考及解决:使用ViewModel时 打开web服务器时 HTTP:404 您正在查找的一个资源或者它依赖项被消除

一、问题

刚打开web服务器时报这个错误
思考及解决:使用ViewModel时 打开web服务器时 HTTP:404 您正在查找的一个资源或者它依赖项被消除_第1张图片
调试了一下,是在启动项中有问题。我的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()
    

Reset your password.


@Html.ValidationSummary("", new { @class = "text-danger" })
class="form-group"> @Html.LabelFor(m => m.Email, new { @class = "col-md-2 control-label" })
class="col-md-10"> @Html.TextBoxFor(m => m.Email, new { @class = "form-control" })
} @section Scripts { @Scripts.Render("~/bundles/jqueryval") }

这时出现另一个问题:
思考及解决:使用ViewModel时 打开web服务器时 HTTP:404 您正在查找的一个资源或者它依赖项被消除_第2张图片
看到这个我就明白了,基本上是由于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

你可能感兴趣的:(Web应用开发)