You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

代码中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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:56:04