使用MVC和Javascript验证并将动态添加的字段保存到数据库
我正在尝试验证动态添加的字段并保存到DB。Formvalidation正在工作,但当我将表单提交给控制器模型时。计数没有更改。(model.Count=1) 我相信问题很简单,但出于某种原因我看不出问题所在。 我在等你的帮助 您还可以看到工作示例和调试屏幕截图 编辑 模型 看法使用MVC和Javascript验证并将动态添加的字段保存到数据库,javascript,c#,jquery,asp.net-mvc,formvalidation.io,Javascript,C#,Jquery,Asp.net Mvc,Formvalidation.io,我正在尝试验证动态添加的字段并保存到DB。Formvalidation正在工作,但当我将表单提交给控制器模型时。计数没有更改。(model.Count=1) 我相信问题很简单,但出于某种原因我看不出问题所在。 我在等你的帮助 您还可以看到工作示例和调试屏幕截图 编辑 模型 看法 我认为这是不正确的: $clone .find('[name="BudgetId"]').attr('name', '[' + actualIndex + '].BudgetId
我认为这是不正确的:
$clone
.find('[name="BudgetId"]').attr('name', '[' + actualIndex + '].BudgetId').end()
.find('[name="InvoiceId"]').attr('name', '[' + actualIndex + '].InvoiceId').end()
.find('[name="ActualAmount"]').attr('name', '[' + actualIndex + '].ActualAmount').end()
.find('[name="Percentage"]').attr('name', '[' + actualIndex + '].Percentage').end()
.find('[name="ExtraBudgetary"]').attr('name', '[' + actualIndex + '].ExtraBudgetary').end()
.find('[name="ExtraBudgetaryNo"]').attr('name', '[' + actualIndex + '].ExtraBudgetaryNo').end()
.find('[name="CurrencyRate"]').attr('name', '[' + actualIndex + '].CurrencyRate').end()
.find('[name="Description"]').attr('name', '[' + actualIndex + '].Description').end();
我不确定绑定元素的正确“命名”,尽管我以前在这方面遇到过麻烦。我的方法是增加我的原始列表,循环浏览,然后完全按照原样复制绑定方式。我认为这是不正确的:
$clone
.find('[name="BudgetId"]').attr('name', '[' + actualIndex + '].BudgetId').end()
.find('[name="InvoiceId"]').attr('name', '[' + actualIndex + '].InvoiceId').end()
.find('[name="ActualAmount"]').attr('name', '[' + actualIndex + '].ActualAmount').end()
.find('[name="Percentage"]').attr('name', '[' + actualIndex + '].Percentage').end()
.find('[name="ExtraBudgetary"]').attr('name', '[' + actualIndex + '].ExtraBudgetary').end()
.find('[name="ExtraBudgetaryNo"]').attr('name', '[' + actualIndex + '].ExtraBudgetaryNo').end()
.find('[name="CurrencyRate"]').attr('name', '[' + actualIndex + '].CurrencyRate').end()
.find('[name="Description"]').attr('name', '[' + actualIndex + '].Description').end();
我不确定绑定元素的正确“命名”,尽管我以前在这方面遇到过麻烦。我的方法是增加我的原始列表,循环遍历它,然后完全按照原样复制绑定的方式。您似乎要将项目添加到存储库中,好的,但是您将对上下文的更改保存在哪里?例如,如果您使用的是DbContext,那么您将使用DbContext.Save();我正在使用实现相关接口的具体类。这是我在ActualRepository.cs BudgetContext context=new BudgetContext()中的保存方法;public void Create(实际a){context.Actuals.Add(a);context.SaveChanges();}您似乎正在将项目添加到存储库中,好的,但是您将对上下文的更改保存在哪里?例如,如果您使用的是DbContext,那么您将使用DbContext.Save();我正在使用实现相关接口的具体类。这是我在ActualRepository.cs BudgetContext context=new BudgetContext()中的保存方法;public void Create(实际a){context.Actuals.Add(a);context.SaveChanges();}当我像下面的命名克隆一样更新命名时工作正常,但是当我提交表单时,表单计数仍然没有增加
.find('[name=“['+actualIndex+'].BudgetId“]').attr('name','['+actualIndex+'].BudgetId').end()
当我更新命名时,如下命名克隆工作正常,但当我提交表单时,表单计数仍然没有增加.find('[name=“['+actualIndex+'].BudgetId']).attr('name','['+actualIndex+'].BudgetId').end()
if (ModelState.IsValid)
{
var status = statusRepository.FindByName("In Process of Actualization");
var user = userRepository.FindByName(SessionPersister.Username);
foreach (var i in acVM)
{
var invoice = invoiceRepository.FindById(i.InvoiceId);
Actual actual = new Actual
{
BudgetId = i.BudgetId,
InvoiceId = i.InvoiceId,
ActualAmount = i.ActualAmount,
ExtraBudgetary = i.ExtraBudgetary,
ExtraBudgetaryNo = i.ExtraBudgetaryNo,
TransactionDate = DateTime.Now,
Currency = "USD",
CurrencyRate = i.CurrencyRate,
Description = i.Description,
//DistributionTemp = i.DistributionTemp,
Percentage = i.Percentage
};
actualRepository.Create(actual);
if (actual != null)
{
if (i.DistributionTemp == true)
{
DistributionTemplate distributionTemp = new DistributionTemplate
{
DistributionName = i.DistributionName,
Percentage = i.Percentage,
ProcessedBy = user.UserId,
Explanation = i.Description,
Validity = i.Validity,
ActualAmount = actual.ActualAmount,
TransactionDate = DateTime.Now
};
distributionTempRepository.Create(distributionTemp);
if (distributionTemp != null)
{
actual.DistributionId = distributionTemp.DistributionId;
actualRepository.Update(actual);
}
}
Process process = new Process
{
InvoiceId = i.InvoiceId,
StatusId = status.StatusId,
ProcessedBy = user.UserId,
ProcessDate = DateTime.Now,
//Confirmatory = relatedUnitManager.UnitId
};
processRepository.Create(process); // Yapılan işlemin kaydedilmesi
ViewBag.BudgetId = new SelectList(budgetRepository.SelectBudgets(), "BudgetId", "BudgetId", i.BudgetId);
ViewBag.DistributionId = new SelectList(distributionTempRepository.SelectDistributions(), "DistributionId", "DistributionName", i.DistributionId);
ViewBag.InvoiceId = new SelectList(invoiceRepository.SelectInvoices(), "InvoiceId", "InvoiceNo", i.InvoiceId);
if (process != null)
{
invoice.LastProcessId = process.ProcessId;
invoiceRepository.Update(invoice); // Yapılan son işleme dair id bilgisinin fatura tablosuna eklenmesi
}
}
else
{
TempData["MessageFail"] += "Something went wrong!";
return RedirectToAction("Details/" + invoice.InvoiceId, "Invoices");
}
acVM = new List<ActualizationVM> { new ActualizationVM { ExtraBudgetary = false, ExtraBudgetaryNo = "", BudgetId = 0, InvoiceId = 0, Description = "", ActualAmount = 0, Percentage = 0, CurrencyRate = 0} };
TempData["MessageSuccess"] += "Invoice is successfully actualized.";
return RedirectToAction("Details/" + invoice.InvoiceId, "Invoices");
}
}
return View(acVM);
$clone
.find('[name="[' + actualIndex + '].BudgetId"]').attr('name', '[' + actualIndex + '].BudgetId').end()
.find('[name="[' + actualIndex + '].InvoiceId"]').attr('name', '[' + actualIndex + '].InvoiceId').end()
.find('[name="[' + actualIndex + '].ActualAmount"]').attr('name', '[' + actualIndex + '].ActualAmount').end()
.find('[name="[' + actualIndex + '].Percentage"]').attr('name', '[' + actualIndex + '].Percentage').end()
.find('[name="[' + actualIndex + '].ExtraBudgetary"]').attr('name', '[' + actualIndex + '].ExtraBudgetary').end()
.find('[name="[' + actualIndex + '].ExtraBudgetaryNo"]').attr('name', '[' + actualIndex + '].ExtraBudgetaryNo').end()
.find('[name="[' + actualIndex + '].CurrencyRate"]').attr('name', '[' + actualIndex + '].CurrencyRate').end()
.find('[name="[' + actualIndex + '].Description"]').attr('name', '[' + actualIndex + '].Description').end();
$clone
.find('[name="BudgetId"]').attr('name', '[' + actualIndex + '].BudgetId').end()
.find('[name="InvoiceId"]').attr('name', '[' + actualIndex + '].InvoiceId').end()
.find('[name="ActualAmount"]').attr('name', '[' + actualIndex + '].ActualAmount').end()
.find('[name="Percentage"]').attr('name', '[' + actualIndex + '].Percentage').end()
.find('[name="ExtraBudgetary"]').attr('name', '[' + actualIndex + '].ExtraBudgetary').end()
.find('[name="ExtraBudgetaryNo"]').attr('name', '[' + actualIndex + '].ExtraBudgetaryNo').end()
.find('[name="CurrencyRate"]').attr('name', '[' + actualIndex + '].CurrencyRate').end()
.find('[name="Description"]').attr('name', '[' + actualIndex + '].Description').end();