ASP.NET 中Double.Parse(String)转换问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ASP.NET 中Double.Parse(String)转换问题相关的知识,希望对你有一定的参考价值。

double a;
foreach (GridViewRow grv in GridView1.Rows)

a = double.Parse(grv.Cells[1].Text);


提示错误:
System.FormatException: 输入字符串的格式不正确。

但如果是
double a;
string p = ((TextBox)this.GridView1.Rows[e.RowIndex].Cells[4].Controls[0]).Text.Trim().GetType().ToString();

a=Double.Parse(p);
就可以通过......

哪位兄弟能帮忙解答一下~~~
刚才打错了应该是:
double a;
string p = ((TextBox)this.GridView1.Rows[e.RowIndex].Cells[4].Controls[0]).Text.Trim();
a=Double.Parse(p);

就可以通过......

grv.Cells[1].Text的值为5.0000.类型String

2楼的哥们,按你说的依然不行,但是我把这段代码复制到其他控件,譬如:BUTTON的单击事件里,就能正常运行,代码完全一样,我就是非常的纳闷!!!

参考技术A 你上面的grv.Cells[1].Text不等于((TextBox)this.GridView1.Rows[e.RowIndex].Cells[4].Controls[0]).Text.Trim().GetType().ToString()。你获取grv.Cells[1].Text的值,看看,是什么,是不是数字型的字符串,确定了之后再强制转成double 参考技术B 你应该先看看值是多少

double a;
string b;
foreach (GridViewRow grv in GridView1.Rows)

b=grv.Cells[1].Text;
a = double.Parse(b);
本回答被提问者和网友采纳
参考技术C grv.Cells[1]是模板列吧?如果是就会得不到cell里的值,只能得到"",所以会出错,你应该用((Label)(gv.rows[index].findcontrol("lblXXX")).Text来获取值

ASP.net Core API 中的路由

【中文标题】ASP.net Core API 中的路由【英文标题】:Routes in ASP.net Core API 【发布时间】:2017-04-13 14:38:08 【问题描述】:

我在 Asp.net 核心中阅读了很多关于 API 路由的主题,但我无法使其工作。

首先,这是我的控制器:

Public class BXLogsController : Controller

    //[HttpGet("api/[controller]/ID/id", Name = "GetL")]
    public IActionResult GetById(string id)
    
        if (id.Trim() == "")
            return BadRequest();
        else
        
            Logs l = AccessBase.AccBase.GetLog(id);
            return Json(l);
        
    

    //[HttpGet("api/[controller]/API/apiname", Name = "GetLAPI")]
    public IActionResult GetByAPI(string apiname)
    
        if (apiname.Trim() == "")
            return BadRequest();
        else
        
            List<Logs> lstLogs = AccessBase.AccBase.GetLogsApi(apiname);
            return Json(lstLogs);
        
    

我尝试将HttpGetAttribute 与路径一起使用(请参阅评论),但这不起作用。

所以我想使用MapRoute 方法,但这也不起作用。

app.UseMvc(routes =>

    routes.MapRoute(
        name: "LogsId",
        template: "api/[controller]/ID/id",
        defaults: new  controller = "BXLogs", action = "GetById" );

    routes.MapRoute(
        name: "LogsAPI",
        template: "api/[controller]/API/apiname",
        defaults: new  controller = "BXLogs", action = "GetByAPI" );
);

我一定忘记了什么,但我什么也没看到。

谁能帮帮我?

【问题讨论】:

确保没有重复的路线。 【参考方案1】:

试试这个。您可以在控制器上放置一个通用的路由前缀。

[Route("api/[controller]")]
public class BXLogsController : Controller 
    //GET api/BXlogs/id/blah
    [HttpGet("ID/id", Name = "GetL")]
    public IActionResult GetById(string id)  ... 

    //GET api/BXlogs/api/blahapi
    [HttpGet("API/apiname", Name = "GetLAPI")]
    public IActionResult GetByAPI(string apiname)  ... 

在此处阅读属性路由Routing to Controller Actions

【讨论】:

或本教程:https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-web-api【参考方案2】:

如果您打算使用类似于 Web API 的自定义操作名称。

 [Route("api/[controller]")]
    public class BXLogsController : Controller 
        //GET api/BXlogs/blahapi
        [HttpGet("apiname", Name = "GetLAPI")]
        public IActionResult GetByAPI(string apiname)  ... 
    

稍微扩展到@nkosi

所以你会打电话给

GET:https://localhost:44302/api/BXLogs/GetLAPI

【讨论】:

【参考方案3】:

注意

动作无法通过定义的常规路由访问 Startup.Configure 中的 UseEndpoints、UseMvc 或 UseMvcWithDefaultRoute。

所以你不能使用带有 API 的 UseMvc 路由

来自: https://docs.microsoft.com/en-US/aspnet/core/web-api/?view=aspnetcore-3.0

【讨论】:

以上是关于ASP.NET 中Double.Parse(String)转换问题的主要内容,如果未能解决你的问题,请参考以下文章

asp.net数组声明 赋值 读取 遍历

Decimal.Parse 和 Double.Parse System.FormatException 不同的行为

asp及asp.net的urlencode问题

Double.Parse("NaN") 是不是正确解析?

asp.net mvc中Controller向View传值方式总结

asp.net两个数组的并集