zoukankan      html  css  js  c++  java
  • ASP.NET MVC3 常用整理

    在ASP.NET MVC 中获取当前URL、controller、action

    一、 URL的获取很简单,ASP.NET通用: 
    【1】获取 完整url (协议名+域名+虚拟目录名+文件名+参数) 
    string url=Request.Url.ToString(); 
    【2】获取 虚拟目录名+页面名+参数: 
    string url=Request.RawUrl; 
    (或 string url=Request.Url.PathAndQuery;) 
    【3】获取 虚拟目录名+页面名: 
    string url=HttpContext.Current.Request.Url.AbsolutePath; 
    (或 string url= HttpContext.Current.Request.Path;) 
    【4】获取 域名: 
    string url=HttpContext.Current.Request.Url.Host; 
    【5】获取 参数: 
    string url= HttpContext.Current.Request.Url.Query; 
    【6】获取 端口: 
    Request.Url.Port 


    二、当前controller、action的获取 
    RouteData.Route.GetRouteData(this.HttpContext).Values["controller"] 
    RouteData.Route.GetRouteData(this.HttpContext).Values["action"] 
    或 
    RouteData.Values["controller"] 
    RouteData.Values["action"] 
    如果在视图中可以用 
    ViewContext.RouteData.Route.GetRouteData(this.Context).Values["controller"] 
    ViewContext.RouteData.Route.GetRouteData(this.Context).Values["action"] 
    或 
    ViewContext.RouteData.Values["controller"] 
    ViewContext.RouteData.Values["action"]
     
     
    三、模块化传递参数

    @Html.Partial("_Menu_74", new ViewDataDictionary() { { "defaultID", "87" } })

    页面接收参数 ViewData["defaultID"]
     
    四、下拉列表

    比如我的主表是TCases,其中有字段AreaID是和表TAreas(字段:ID,Name)中的ID关联,在新建或修改主表记录时要给Area提供下拉列表以选择,此时的实现方法是:

    Controller对应的Action中在return View之前加入

    ViewBag.Area = new SelectList(db.TAreas, "ID", "Name");

    在对应的View中加入

    @Html.DropDownListFor(model => model.AreaID, ViewBag.Area as IEnumerable<SelectListItem>)

    @Html.ValidationMessageFor(model => model.AreaID)

    需要注意的2点:

    1、ViewBag中变量的名称不要和字段名重复,比如上面就不要用ViewBag.AreaID,似乎这样会导致不会自动指定默认值。因为这个问题出现在初期,相距已经有些时日,不知道根本原因是否如此,反正当时是通过这样的修改解决了问题。

    2、有时候提示如下之类错误:

    具有键“AreaID”的 ViewData 项属于类型“System.Int32”,但它必须属于类型“IEnumerable<SelectListItem>”。

    但实际上问题并不是在这个字段上。我当时是有一个字段是DateTime类型,长短日期不一致,还有有时是空等,这个是问题的原因所在。后来是把Model中DateTime类型改为DateTime?类型,再控制为短日期格式,问题解决。

     五、输入框样式控制

    在录入编辑界面,常用的方式如下:

    @Html.EditorFor(model => model.PrivideTime)

    但是这样就不能控制输入框属性。需要控制属性时就必须:

    @Html.TextBox("PrivideTime", Model.PrivideTime.Value.ToShortDateString(), new { disabled = "disabled", @readonly = "readonly" })

    其中也给出了以短日期格式显示的方法。

     六、图片上传

    上传图片可以采用如下方式:

    @using (Html.BeginForm("About", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))

    {

    @Html.ValidationSummary(true)

    <p>

    <input name="file" type="file" id="file1" /><input type="submit" value="上传图片" />

    </p>

    }

    红色字体是要注意的地方,必须要有。

    这里还有一个问题:同一个页面中,原本有一个保存按钮,现在又有了一个上传图片按钮,两个都是submit,在Controller中是如何区分呢?

    通过

    Request.Files.Count == 0

    或者

    var file = Request.Files[0]; 
    if (file.ContentLength == 0)

    这样是不能区分出来的。在没有选中文件就点“上传图片”或者点“保存”,上面的两个判断结果是一样的。

    我当时采用了一个并不是很好的方法:

    去掉“上传图片”按钮,选择了文件之后立即触发submit,这样就避免了没有选中文件就点“上传图片”这种情况。

    <input name="file" type="file" id="file1" onchange="this.form.submit()" />

    到了后期之后,发现其实 有更好的办法,用一个hidden存放标志,controller中获取该标志,根据值的不同进行区分。具体方法我在后面解决打印时会讲。


    七、页面打印

    要求打印功能,目前似乎要求不高,利用浏览器自带的打印大体就差不多了,当然需要去掉一些多余的东西。

    在网上找了一个很简单的方法:

    function preview() {
            bdhtml = window.document.body.innerHTML;
            sprnstr = "<!--start";
            eprnstr = "<!--end";
            iprnstr="print-->"
            prnhtml = bdhtml.substr(bdhtml.indexOf(sprnstr + iprnstr) + 17);
            prnhtml = prnhtml.substring(0, prnhtml.indexOf(eprnstr + iprnstr));
            window.document.body.innerHTML = prnhtml;
            window.document.body.style.color   =   '#000000 '; 
            window.print;
        }

    ……

    <!—startprint—>

    ……这里就是需要打印的内容

    <!--endprint-->

    <input type= "button" id="btnPrint" name= "print" value= "预览并打印" onclick= "preview()"   />

    要注意的是:

    1、不要直接设

    sprnstr = "<!—startprint";

    这样查找的时候就会找到jquery代码中的这一段文字了;

    2、如果有相隔的区域,则照此方法多用几个注释标签,通过查找然后连接在一起。


  • 相关阅读:
    浅谈ssh(struts,spring,hibernate三大框架)整合的意义及其精髓
    Spring中ClassPathXmlApplicationContext类的简单使用
    测试计划/系统风险 (设计方面、开发方面、测试本身 等风险)
    浏览器兼容
    4.0 爬虫
    2.1 IDEA
    2.3 接口测试
    1.1测试分类
    1.3 ODPS
    2.1 Word 插入 smartart、图表
  • 原文地址:https://www.cnblogs.com/haiyabtx/p/2612226.html
Copyright © 2011-2022 走看看