我的控制器不能從我的視圖中的表單接收資料。 我之前在其他模型中使用了基本相同的代碼,在那里它作業得非常好。 誰能解釋一下為什么會出現這種情況?
控制器:
[HttpPost]
[ValidateAntiForgeryToken] 。
public IActionResult ChangeWiFiNetwork(Models.Settings.NetworkSettings model)
{
Logger.LogInformation("SSID:"/span>, model.SSID)。
Logger.LogInformation("PASS:"/span>, model.Password)。
return RedirectToAction("index")。
}
查看:
@model Webserver.Models.Settings.Settings
<h1>Settings</h1>
<div class="row">/span>
<div class="col-6">/span>
<form asp-action="ChangeWiFiNetwork"/span>>
<div class="form-group"/span>>
<label asp-for="網路。 SSID" class="control-label"></label>
<input asp-for="網路。 SSID" class="form-control" <>
<span asp-validation-for="網路。 SSID" class="text-danger"></span>
</div>/span>
<div class="form-group">
<label asp-for="網路。 密碼" class="control-label"></label>
<input asp-for="網路。 密碼" class="form-control" />。
<span asp-validation-for="網路。 密碼" class="text-danger"></span>
</div>/span>
<div class="form-group">
< input type="submit" value="Save" class=btn btn-primary" />
</div>
</form>/span>
</div>/span>
</div>/span>
模型:
namespace Webserver.Models.Settings
{
public class Settings {
{
public NetworkSettings Network { get; set; }
}
namespace Webserver.Models.Settings
{
public class NetworkSettings {
{
public string SSID { get; set; }
public string Password { get; set; }
}
輸出
SSID。
PASS。
兩者在除錯模式下都顯示為空。
Firefox網路分析顯示Network.SSID和Network.Password在Form-Data中被發送。
我使用的是.Net 5
。謝謝
uj5u.com熱心網友回復:
現在我只是從Request.Form中手動提取數值。
這真的是很糟糕的代碼,但我就是想不明白為什么模型系結不能作業。
[HttpPost]
[ValidateAntiForgeryToken] 。
public IActionResult ChangeWiFiNetwork(Models.Settings.NetworkSettings throwaway)
{
if (! (Request.Form.ContainsKey("NetworkSettings.SSID") && Request.Form.ContainsKey("NetworkSettings.Password") ))
{
throw new Exception("SSID或密碼丟失!")。
}
Models.Settings.NetworkSettings = new()
{
SSID = Request.Form["NetworkSettings.SSID"]。
密碼 = Request.Form["NetworkSettings.Password"].
};
Logger.LogInformation("SSID: " settings.SSID)。
Logger.LogInformation("PASS: " settings.Password)。
return RedirectToAction("Index") 。
}
uj5u.com熱心網友回復:
修復視圖,因為你使用AntiForgeryToken,所以將其添加到表單中
<form asp-action="ChangeWiFiNetwork"/span>>
@Html.AntiForgeryToken()
和動作輸入引數應與模型相同
public IActionResult ChangeWiFiNetwork(Models.Settings.Setting model)
uj5u.com熱心網友回復:
你將模型設定為@model Webserver.Models.Settings.Settings,但在你的動作中,你將輸入引數設定為Models.Settings.NetworkSettings模型,
所以你應該這樣改變你的動作:
public IActionResult ChangeWiFiNetwork(Models.Settings.Settings model)
或者改變視圖中的系結模型:
@model Webserver.Models.Settings.NetworkSettings
無論如何,你需要在視圖和控制器動作中保持模型的一致性。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/322495.html
標籤:
