我正在嘗試了解依賴注入。我正在使用 .net 6.0 Razor Pages 并且我想“計數”,通過依賴注入呼叫方法的次數。我的索引如下:
public class IndexModel : PageModel
{
public ICounter _counter;
public IndexModel(ICounter counter)
{
_counter = counter;
}
public int Count { get; set; }
public void OnPostInfo()
{
Count = _counter.Calls(Count);
}
}
我的“計數器”課程如下
public int Number { get; set; }
public int Calls(int Number)
{
return Number = 1 ;
}
還有我的界面
public interface ICounter
{
int Calls(int Number);
}
我的 Program.cs 類
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.AddSingleton<ICounter, Counter>();
我的看法。
<div class="card">
<div class="card-body">
@Model.Count
</div>
</div>
<div class="row">
<form asp-page-handler="Info" method="post">
<button class="btn btn-default">Push to count</button>
</form>
</div>
它在 Program.cs 中作為瞬態添加。該站點通過一個按鈕更新,并且“有效”,但它只更新為 1。但隨后它停止了。當我按下使用 OnPostInfo 方法的按鈕時,它不會繼續“2、3、4”等。
我在這里錯過了什么?
uj5u.com熱心網友回復:
其實這不是生活造成的。它會費的Count不傳遞到后端的值,所以后端總是會得到整數默認值0的Count。
您需要設定一個隱藏的輸入或路由引數來傳遞Count.
設定隱藏輸入的第一種方法:
看法:
<div class="card">
<div class="card-body">
@Model.Count
</div>
</div>
<div class="row">
<form asp-page-handler="Info" method="post">
<input hidden asp-for="Count" value="@Model.Count" /> <!--set the hidden input-->
<button class="btn btn-default">Push to count</button>
</form>
</div>
頁面模型:
public class IndexModel : PageModel
{
public ICounter _counter;
public IndexModel(ICounter counter)
{
_counter = counter;
}
[BindProperty] //add this attribute to get the Count value
public int Count { get; set; }
public void OnPostInfo()
{
Count = _counter.Calls(Count);
}
}
第二種設定路由引數的方法:
看法:
<div class="card">
<div class="card-body">
@Model.Count
</div>
</div>
<div class="row"> <!--add asp-route-countNum -->
<form asp-page-handler="Info" asp-route-countNum="@Model.Count" method="post">
<button class="btn btn-default">Push to count</button>
</form>
</div>
頁面模型:
public class IndexModel : PageModel
{
public ICounter _counter;
public IndexModel(ICounter counter)
{
_counter = counter;
}
public int Count { get; set; }
public void OnPostInfo(int countNum) //add parameter here
{
Count = _counter.Calls(countNum); //change here...
}
}
結果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/366920.html
