Fix: improve EditTransaction form handling and validation

- Add hidden fields for immutable transaction properties to preserve values during form submission
- Make category field optional by removing validation for empty values
- Simplify category input handling by removing duplicate hidden field
- Clean up JavaScript by using proper element IDs instead of querySelector

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
AJ
2025-10-26 01:59:50 -04:00
parent 4bd89a0ab5
commit 56089cc437
2 changed files with 17 additions and 7 deletions

View File

@@ -34,6 +34,12 @@
<div class="card-body">
<form method="post">
<input type="hidden" asp-for="Transaction.Id" />
<input type="hidden" asp-for="Transaction.Date" />
<input type="hidden" asp-for="Transaction.Name" />
<input type="hidden" asp-for="Transaction.Memo" />
<input type="hidden" asp-for="Transaction.Amount" />
<input type="hidden" asp-for="Transaction.CardLabel" />
<input type="hidden" asp-for="Transaction.AccountLabel" />
<!-- Read-only fields -->
<div class="row mb-3">
@@ -89,11 +95,10 @@
<div id="customCategoryInput" style="display: @(Model.UseCustomCategory ? "block" : "none")">
<input asp-for="Transaction.Category"
class="form-control"
id="categoryInput"
placeholder="Enter custom category" />
</div>
<input type="hidden" asp-for="Transaction.Category" id="categoryHidden" />
<div class="form-text">Select a category or create a new one</div>
<span asp-validation-for="Transaction.Category" class="text-danger"></span>
</div>
@@ -261,16 +266,15 @@
<script>
function handleCategoryChange() {
const select = document.getElementById('categorySelect');
const customInput = document.getElementById('customCategoryInput');
const hiddenInput = document.getElementById('categoryHidden');
const categoryInput = document.querySelector('input[name="Transaction.Category"]');
const customInputDiv = document.getElementById('customCategoryInput');
const categoryInput = document.getElementById('categoryInput');
if (select.value === '__custom__') {
customInput.style.display = 'block';
customInputDiv.style.display = 'block';
categoryInput.value = '';
categoryInput.focus();
} else {
customInput.style.display = 'none';
customInputDiv.style.display = 'none';
categoryInput.value = select.value;
}
}

View File

@@ -97,6 +97,12 @@ namespace MoneyMap.Pages
public async Task<IActionResult> OnPostAsync()
{
// Remove Category from model state validation if it's empty (category is optional)
if (string.IsNullOrWhiteSpace(Transaction.Category))
{
ModelState.Remove("Transaction.Category");
}
// Remove Notes from model state validation if it's empty
if (string.IsNullOrWhiteSpace(Transaction.Notes))
{