[英]How to call a method in Blazor Server Side App on get set of a parameter
我有一个 select 控件绑定到选定的值。 由于我不能同时使用@onChange 和@bind,所以@bind 版本是什么:
<select @onchange='(e => DisplayToggle(e, "DMGReported"))' class="form-control">
<option value=" "> </option>
<option value="Yes">Yes</option>
<option value="No">No</option>
</select>
执行:
async Task DisplayToggle(ChangeEventArgs e, string DivToToggle)
{
selectedString = e.Value.ToString();
//Do something with that selected value
}
使用 OnParamterSet(),它会触发一次......但如果下拉列表中的选定选项发生更改,它不会再次触发 go。 尝试在参数的 get/set 中调用方法会导致页面出现堆栈溢出,并重复数千次。 在我偶然发现这个之后我尝试了:
<select @bind="selectedString">
<option value=" "> </option>
<option value="Yes">Yes</option>
<option value="No">No</option>
</select>
<p>@className</p>
string className = "";
public string selectedString
{
get => Test(selectedString);
set { selectedString = value; }
}
public string Test(string test)
{
if (selectedString == "Yes")
{
className = "It worked";
}
else
{
className = "It Failed";
}
return test;
}
功能代码感谢 Brian Parker 的帮助:奇怪的是,这必须在页面上:
<p style="display:none;">@dmgReported</p>
为此:
string selectedString;
string dmgReported => packageSubmission.RepDmg switch
{
"Yes" => ToggleDiv("Yes", "DMGNotReported", "DMGReported"),
"No" => ToggleDiv("No", "DMGReported", "DMGNotReported"),
_ => ToggleDiv("", "DMGReported", "DMGNotReported")
};
public string ToggleDiv(string YesNo, string DivToHide, string DivToShow)
{
try
{
if (!String.IsNullOrEmpty(packageSubmission.RepDmg))
{
if (YesNo == "No" || YesNo == "Yes")
{
JSRuntime.InvokeAsync<object>("hideElement", new { id = DivToHide });
JSRuntime.InvokeAsync<object>("showGroup", new { id = DivToShow });
}
else
{
JSRuntime.InvokeAsync<object>("hideElement", new { id = DivToHide });
JSRuntime.InvokeAsync<object>("hideElement", new { id = DivToShow });
}
}
}
catch { }
return DivToHide;
}
您不必使用二传手。 只是基于绑定值的计算属性。
<select @bind="selectedString">
<option value=" "> </option>
<option value="Yes">Yes</option>
<option value="No">No</option>
</select>
<p>@className</p>
@code {
string selectedString;
string className => selectedString switch
{
"Yes" => "It worked",
"No" => "It failed",
_ => ""
};
}
如果你需要使用setter:
<select @bind="SelectedString">
<option value=" "> </option>
<option value="Yes">Yes</option>
<option value="No">No</option>
</select>
<p>@className</p>
@code {
string className;
string selectedString;
string SelectedString
{
get => selectedString;
set
{
if(selectedString == value) return; // Do nothing
selectedString = value;
className = value switch
{
"Yes" => "It worked",
"No" => "It failed",
_ => ""
};
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.