我在为MVC 5需要保存多个孩子的概念上遇到了一些麻烦。该实体来自每日的货币对图表,它将是父母。而我需要它来创建父母,让我们说欧元/美元,然后分配可以是一,二或十的重要级别。所以我知道我可以创建父母,然后在其他步骤创建孩子,但它不是非常“友好”,因为它必须为许多货币对和每天做。我想知道是否有一种方法可以在一个页面中完成所有这些操作。我不知道我是否清楚我想要什么,但作为一个概念,我认为这就像在博客中添加标签,你创建“博客文章”并在同一页面添加标签,但你不知道这篇文章会有多少标签。
这是我的模特
public class Pair
{
public int pairID { get; set; }
public string name { get; set; }
public DateTime Date { get; set; }
public virtual IEnumerable<Levels> Levels { get; set; }
}
public class Levels
{
public int levelID { get; set; }
public double Value { get; set; }
public string comment { get; set; }
public int pairID { get; set; }
public virtual Pair Pair { get; set; }
}
答案 0 :(得分:0)
我可以通过两种方式来实现您的目标:
Levels
的情况下实现此目的。 此示例仅允许您按Pair
添加5 Levels
。如果您愿意,只需更改以下代码即可增加Levels = Enumerable.Range(1, 5).Select(i => new Levels()).ToList();
public class Pair
{
public Pair()
{
Levels = Enumerable.Range(1, 5).Select(i => new Levels()).ToList();
}
....
}
public class Levels
{
....
}
<强>模型强>
[HttpGet]
public ActionResult ExampleParentChild()
{
return View(new Pair());
}
[HttpPost]
public ActionResult ExampleParentChild(Pair pair)
{
if (ModelState.IsValid)
{
context.Pairs.Add(pair);
context.SaveChanges();
return RedirectToAction("Index");
}
return View(pair);
}
<强>控制器强>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
@Html.LabelFor(m=> m.Date)
@Html.EditorFor(m=>m.Date)
@foreach(var item in Model.Levels)
{
@Html.LabelFor(m=> item.Value)
@Html.EditorFor(m=> item.Value)
@Html.LabelFor(m=> item.comment)
@Html.EditorFor(m=> item.comment)
}
<input type="submit" value="Create" />
}
查看强>
JavaScript
input
才能在运行中向页面添加更多jQuery
个元素。您可以使用AngularJS
或AngularJS
。我向您提供了使用WEB API
和AngularJs
的示例,我向您提供AngularJS
示例的原因是您要求在单个页面中执行此操作并且每个人都使用{@ 1}}现在是SPA。 <强> AngularController 强>
angular.module('Pair', [])
.controller('PairController', PairController);
function AccountController($http) {
vm.Pair = {};
vm.Pair.Levels = []
vm.addLevel = function(){
if (vm.Pair.Levels)
{
vm.Pair.Levels.push({});
}
};
vm.savePair = function () {
$http.post('/api/PairsApi/', vm.Pair).success(function (data) {
vm.Pair = {};
}).error(function (data) {
// code for error
});
};
};
<强>的WebAPI 强>
[Route("api/PairApi/{id?}", Name = "api_PairApi")]
public class PairLedgersApiController : ApiBaseController
{
DbContext _db = new DbContext();
public IHttpActionResult PostPairLedger(Pair pair)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
_db.Pairs.Add(pair);
_db.Save();
return CreatedAtRoute("api_PairApi", new { id = pair.Id }, Pair);
}
.....
}
查看强>
<div data-ng-app="Pair" data-ng-controller="PairController as vm">
<form name="PairForm" ng-submit="vm.savePair()" novalidate>
<div class="form-body">
<label>Name</label>
<input type="text" name="pairName" ng-model="vm.Pair.name " class="form-control"/>
<label>Date</label>
<input type="date" name="pairDate" ng-model="vm.Pair.Date" value="{{vm.Pair.Date | date: 'yyyy-MM-dd'}}" class="form-control"/>
<div ng-repeat="level in vm.Pair.Levels">
<label>Value</label>
<input type="text" name="levelValue" ng-model="level.value" class="form-control"/>
<label>Comment</label>
<input type="text" name="levelComment" ng-model="level.comment" class="form-control"/>
</div>
<input type="submit" value="Save" class="btn blue" />
<button ng-click="vm.addLevel();" class="btn blue">
Add Level
</button>
</div>
</form>
</div>
如果您是AngularJS
的新用户,可以参考以下链接,将其与ASP .NET MVC
一起使用:
Build a Single Page Application (SPA) with ASP.NET Web API and Angular.js
答案 1 :(得分:-1)
public long Save(INVStoreTrans model, int userId, string pageUrl)
{
long CurrentTransactionID = 0;
try
{
using (TransactionScope transaction = new TransactionScope())
{
using (_context)
{
var GetTransactionNo = DalCommon.GetPreDefineNextCodeByUrl(pageUrl);
if (GetTransactionNo != null)
{
#region New_Transaction_Insert
INV_StoreTrans objIssue = new INV_StoreTrans();
objIssue.TransactionNo = GetTransactionNo;
objIssue.TransactionDate = DalCommon.SetDate(model.TransactionDate);
objIssue.TransactionCategory = "ISU";
objIssue.TransactionType = "STI";
objIssue.TransactionFrom = model.IssueFrom;
objIssue.TransactionTo = model.IssueTo;
objIssue.TransactionStatus = "TRI";
objIssue.RecordStatus = "NCF";
objIssue.SetBy = userId;
objIssue.SetOn = DateTime.Now;
_context.INV_StoreTrans.Add(objIssue);
_context.SaveChanges();
CurrentTransactionID = objIssue.TransactionID;
#endregion
#region Item Insert
if (model.TransactionItemList != null)
{
foreach (var item in model.TransactionItemList)
{
INV_StoreTransItem objItem = new INV_StoreTransItem();
objItem.TransactionID = CurrentTransactionID;
objItem.ItemID = item.ItemID;
objItem.SupplierID = item.SupplierID;
objItem.TransactionQty = item.IssueQty;
objItem.TransactionUnit = DalCommon.GetUnitCode(item.IssueUnitName);
objItem.PackSize = DalCommon.GetSizeCode(item.IssuePackSizeName);
objItem.SizeUnit = DalCommon.GetUnitCode(item.IssueSizeUnitName);
objItem.PackQty = item.IssuePackQty;
//objItem.ItemSource = DalCommon.ReturnItemSource(item.ItemSource);
objItem.SetOn = DateTime.Now;
objItem.SetBy = userId;
_context.INV_StoreTransItem.Add(objItem);
//_context.SaveChanges();
}
}
#endregion
}
_context.SaveChanges();
}
transaction.Complete();
}
return CurrentTransactionID;
}
catch (Exception e)
{
return 0;
}
}