前端
radio
name="images"
value=" 1 | 2 | 3 "
<form style="width: 500px" class="pt-3 pb-4">
<div class="mb-3">
<div class="mb-0 h5 d-flex align-items-center">
<div>選擇圖片:</div>
<div style="flex-basis: 65px; line-height: 30px;">
<input class="form-check-input" type="radio" name="images" id="img_one" value="1" checked>
<label class="form-check-label" for="img_one">
img_one
</label>
</div>
<div style="flex-basis: 105px; line-height: 30px;">
<input class="form-check-input" type="radio" name="images" id="img_two" value="2">
<label class="form-check-label" for="img_two">
img_two
</label>
</div>
<div style="line-height: 30px;">
<input class="form-check-input" type="radio" name="images" id="img_three" value="3">
<label class="form-check-label" for="img_three">
img_three
</label>
</div>
</div>
</div>
<button type="submit" id="confirmBtn" class="btn btn-info w-100">確定</button>
</form>
const confirmBtn = document.getElementById('confirmBtn') as HTMLButtonElement;
const images = document.getElementsByName("images");
confirmBtn.addEventListener('click', function(e) {
e.preventDefault();
let images_checked = "0";
images.forEach((element) => {
if ( (element as HTMLInputElement).checked ) {
images_checked = (element as HTMLInputElement).value;
}
})
if (!images_checked) {
alert("請選擇圖片");
return;
}
const formData = new FormData();
formData.append('image', images_checked);
// axios.post("/Home/Index", data)
callApiPostHomeIndex(formData);
})
後端
使用 switch ( Value )
當 Value
要和 case enum 型別
比對時
要將 Value
的類別強制轉成 enum 型別
public enum Images
{
One = 1,
Two,
Three
}
public class HomeController : Controller
{
...
[HttpPost]
public IActionResult Images(IFormCollection formCollection)
{
try
{
if (!Int32.TryParse(formCollection["image"], out int image))
{
return BadRequest(new ErrorResponse() { Message = "圖片選項不在範圍內" });
}
// Error
// switch( image )
// {
// Error: Cannot convert expression of type "ProjectName.Controllers.Images" to type 'int'
// case Images.One:
// break;
// }
// Success
switch ( (Images)image )
{
case Images.One:
...
break;
case Images.Two:
...
break;
...
}
}
catch (Exception e)
{
...
}
}
}
總結
當看到 Error: Cannot convert expression of type "ProjectName.Controllers.EnumName" to type 'int'
我沒有想到 Enum 也會是一個型別,所以一直沒想到用強轉型別的方式,經過這次以後看到錯誤訊息就會多了對於型別的敏銳度 👏