代码中IsPost与AsInt标红?CS0103错误排查求助
解决Razor页面中CS0103(名称不存在)的问题
嘿,我看到你在写Razor页面的数据库查询相关代码时,碰到了IsPost和AsInt(你笔误写成AsPost)的红色下划线,报错CS0103提示这些名称在当前上下文不存在——这个问题我之前也踩过坑,其实是因为ASP.NET Core Razor Pages不再默认支持旧Web Pages的那些快捷方法了,咱们一步步来搞定:
问题根源
在传统ASP.NET Web Pages里,IsPost和AsInt()是内置的简化方法,但到了ASP.NET Core Razor Pages,这些方法被移除了,直接调用自然会找不到定义,触发CS0103错误。
具体解决方案
1. 替换IsPost的判断逻辑
把原来的if (IsPost)改成判断当前请求的方法是否为POST,有两种常用写法:
- 简洁版:
if (Request.Method == "POST") - 更规范的枚举写法:
if (Request.Method == HttpMethods.Post)
2. 替换AsInt()的类型转换
Request.Form["serialnumber"]返回的是StringValues类型,不能直接用AsInt(),咱们用int.TryParse来安全转换(还能处理输入不是数字的异常情况):
int serialnumber; if (!int.TryParse(Request.Form["serialnumber"], out serialnumber)) { // 转换失败时可以设置默认值,或者添加错误提示逻辑 serialnumber = 0; }
或者用C# 7+的简化语法:
int serialnumber = int.TryParse(Request.Form["serialnumber"], out var parsedNum) ? parsedNum : 0;
3. 额外修复:表单input的name属性缺失
我注意到你表单里的input只有id没有name属性,这样提交表单后后台根本获取不到输入值,必须给input加上name,和Request.Form里的键对应上,比如:
<input type="text" id="matn" name="materialnumber"> <input type="text" id="id" name="serialnumber">
修改后的完整代码
@page @model AboutModel @{ ViewData["Title"] = "Datenverzeichnis"; } <h2>@ViewData["Title"]</h2> <form method="post"> @{ if (Request.Method == HttpMethods.Post) { string materialnumber = Request.Form["materialnumber"]; int serialnumber = int.TryParse(Request.Form["serialnumber"], out var parsedNum) ? parsedNum : 0; <text> You entered: <br /> Material Number: @materialnumber <br /> Serial Number: @serialnumber <br /> </text> } } <p> <div> <label for="matn">Materialnummer</label> <input type="text" id="matn" name="materialnumber"> <label for="id">ID</label> <input type="text" id="id" name="serialnumber"> </div> <div> <input type="submit" value="Bestätigen" class="submit" /> <button type="button" id="clear" onclick="document.getElementById('matn').value = ''; document.getElementById('id').value = ''"> Löschen </button> </div> </p> @{ <table> <thead> <tr> <td width="5%">MaterialNumber</td> <td width="5%">SerialNumber</td> <td width="10%">Source</td> <td width="30%">Name</td> <td width="10%">Status</td> <td width="20%">URL</td> </tr> </thead> <tbody> @{ foreach (var deviceInfo in Model.DeviceInfos) { <tr> <td>@deviceInfo.MaterialNumber</td> <td>@deviceInfo.SerialNumber</td> <td>@deviceInfo.Source</td> <td>@deviceInfo.Name</td> <td>@deviceInfo.Status</td> <td>@deviceInfo.Url</td> </tr> } } </tbody> </table> } </form>
这样修改后,红色下划线应该就消失了,表单提交也能正常获取到输入值啦!
内容的提问来源于stack exchange,提问作者Yannick
相关产品推荐
相关产品推荐

