當我單擊Submit表單標簽中的按鈕時,我在第一次加載頁面時在變數中收集的值將被洗掉。我正在使用 In .Net Core MVC。
這是我的代碼
public IActionResult Index(string cap)
{
var rnumber = ViewData["captcha"];
if (cap == rnumber)
{
Isvisble = "visible";
}
randnumber = RandomString(6);
ViewData["captcha"] = randnumber;
return View();
}
這是我的cshtml代碼
<form method="get" asp-action="Index">
<div >
<h1 >Welcome</h1>
<label for="captcha"><b>Enter chaptcha - </b></label>
<label id="lblCapval" for="captchasym"><b>@ViewData["captcha"]</b></label>
<input id="txtCapValue" type="text" placeholder="Enter captcha" name="cap" required>
<br />
<button type="submit">Login</button>
</div>
</form>
在這里,當我單擊時submit button,randnumber兩者ViewData["captcha"]都null在Index方法中。我怎樣才能保留這些價值觀?
uj5u.com熱心網友回復:
ViewData本身不能用于將資料從 View 發送到 Controller。您可以Session改用:
控制器:
public class HomeController : Controller
{
private readonly ILogger<HomeController> _logger;
private readonly IHttpContextAccessor _httpContextAccessor;
private readonly ISession _memorySession;
public HomeController(ILogger<HomeController> logger, IHttpContextAccessor httpContextAccessor)
{
_logger = logger;
_httpContextAccessor = httpContextAccessor;
_memorySession = _httpContextAccessor.HttpContext.Session;
}
public IActionResult Index(string cap)
{
var rnumber = _memorySession.GetString("captcha");
if (cap == rnumber)
{
Isvisble = "visible";
}
string randnumber = RandomString(6);
_memorySession.SetString("captcha", randnumber);
return View();
}
}
看法:
@using Microsoft.AspNetCore.Http
@inject IHttpContextAccessor httpContextAccessor
@{
ViewData["Title"] = "Home Page";
}
<form method="get" asp-action="Index">
<div >
<h1 >Welcome</h1>
<label for="captcha"><b>Enter chaptcha - </b></label>
<label id="lblCapval" for="captchasym"><b>@httpContextAccessor.HttpContext.Session.GetString("captcha")</b></label>
<input id="txtCapValue" type="text" placeholder="Enter captcha" name="cap" required>
<br />
<button type="submit">Login</button>
</div>
</form>
不要忘記注冊服務和中間件:
builder.Services.AddSession();
builder.Services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
app.UseSession();
測驗結果:

另外需要注意的是,你Index的method每次都會進入RandomStringmethod,如果要保存randnumber,需要添加判斷條件。例如,該RandomString方法僅在 時輸入rnumber==null。
您還可以使用輸入ViewData作為字串傳回控制器:
<input type="hidden" name="captcha" value="@ViewData["captcha"]" />
和你的控制器:
public IActionResult Index(string cap ,string captcha)
{
var rnumber = captcha;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/516912.html
標籤:asp.net 核心.net-coreasp.net-core-mvc
下一篇:如何通過查詢解決以下錯誤?
