思考及解决:使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值