Я хочу иметь возможность выбрать строку в таблице (которая представляет собой счет-фактуру), выбрать переключатель, у которого есть значение суммы, и нажать «Подтвердить». После нажатия кнопки подтверждения я хочу, чтобы статус выбранного счета изменился на «Оплачен» или «Частично оплачен» в зависимости от выбранной суммы платежа. Я также хочу, чтобы в таблицу ClientPayments была добавлена новая запись о платеже, связанная с выбранным счетом, я хочу, чтобы PaymentAmount была суммой переключателя, а дата - системной датой.
Код, который у меня есть на данный момент, выдает ошибку, а именно: словарь параметров содержит пустую запись для параметра 'id' не допускающего значения NULL типа 'System.Int32'.
Вот код, который у меня есть. В представлении:
@using (Html.BeginForm("Confirm", "InvoiceController"))
{
foreach (var item in Model)
{
string selectedRow = "";
if (item.InvoiceNumberID == ViewBag.InvoiceNumberID)
{
selectedRow = "selectedRow";
}
<tr class="@selectedRow" valign="top">
<td>
<a href='javascript:void(0)' class='select' [email protected] >Select</a>
</td>
<td>
@Html.DisplayFor(modelItem => item.InvoiceNumberID)
</td>
<td>
@Html.DisplayFor(modelItem => item.InvoiceAmount)
</td>
<td>
@Html.DisplayFor(modelItem => item.InvoiceMonth)
</td>
<td>
@Html.DisplayFor(modelItem => item.InvoiceStatus)
</td>
<td>
@Html.DisplayFor(modelItem => item.Client.FullName)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id = item.InvoiceNumberID }) |
@Html.ActionLink("Details", "Details", new { id = item.InvoiceNumberID }) |
@Html.ActionLink("Delete", "Delete", new { id = item.InvoiceNumberID })
</td>
</tr>
}
<input type='hidden' id='id' name='id' value='0' />
}
</table>
<br />
<p><i>Select or type in a custom amount to confirm as paid:</i>
</p>
<table>
<tr><td><b>Monthly Amounts:</b></td><td><b>Weekly Amounts:</b></td></tr>
<tr><td>Private Lesson (1 Hour) @Html.RadioButton("InvoiceAmount", "640", true) R640.00<br /></td><td>Private Lesson (1 Hour) @Html.RadioButton("InvoiceAmount", "160", true) R160.00<br /> </td></tr>
<tr><td>Private Lesson (1/2 Hour) @Html.RadioButton("InvoiceAmount", "350", true) R350.00<br /></td><td>Private Lesson (1 Hour) @Html.RadioButton("InvoiceAmount", "87.50", true) R87.50<br /></td></tr>
<tr><td>Group Lesson (1 Hour) @Html.RadioButton("InvoiceAmount", "460", true) R460.00</td> <td>Private Lesson (1 Hour) @Html.RadioButton("InvoiceAmount", "115", true) R115.00<br /></td> </tr>
<tr><td>Custom Amount @Html.RadioButton("InvoiceAmount", "115", true) @Html.TextBox("customAmount")<br /></td></tr>
</table>
<script type='text/javascript'>
$('.select').click(function(){
$('#id').val($(this).attr('data-id'));
alert($('#id').val());
});
</script>
Подтвердите оплату
И код в контроллере:
public ActionResult Confirm(int id, long InvoiceAmount)
{
Invoices invoices = db.Invoice.Find(id);
//now validate that if the logged in user is authorized to select and confirm this invoice or not.
if (InvoiceAmount != invoices.InvoiceAmount)
{
invoices.InvoiceStatus = "Partly Paid";
}
else
{
invoices.InvoiceStatus = "Confirmed";
}
db.Entry(invoices).State = EntityState.Modified;
db.SaveChanges();
return View();
}
В предупреждении javascript отображается правильный ID, который я выбираю, но когда я нажимаю "Подтвердить", он не находит ID. Может ли кто-нибудь увидеть, где я ошибаюсь?
Спасибо Эми