
[英][dotNET Core]Passing model to view -> bind checkbox with it's data in POST method form -> sending whole model to controller
[英]Unable to send Model Data from Controller's GET Method to Controller's POST Method via View
我正在通过 ViewBag(ViewBag.AffiliateData) 将附属公司列表从 controller 的 get 方法发送到 View,并期望在控制器的 HTTP Post 方法(myAffiliateList)中获得相同的列表,但收到的值为 null。你能帮我理解一下吗我在这里做错了什么?
注意:我发送的数据是隐藏的,因为它不需要显示。 因此,我试图在 HTTP-Post 方法中获取 2 个值,一个被选中,另一个用于动态填充 select 框的整个列表。
Model:
public class ModelOld
{
public string Aname { get; set; }
public string Acode { get; set; }
}
public class ModelNew
{
public string Acode { get; set; }
public IEnumerable<ModelOld> myAffiliateList { get; set; }
}
Controller:用户邀请.cs
// GET Method
public ActionResult Import()
{
List<ModelOld> affiliateList = new List<ModelOld>();
ModelNew affiliateList1 = new ModelNew();
var affiliateMappingList = Configuration.GetSection("AffiliateMapping").GetChildren();
foreach (var KeyValuePair in affiliateMappingList)
{
affiliateList.Add(new ModelOld()
{
Aname = KeyValuePair.Key,
Acode = KeyValuePair.Value
});
}
affiliateList.Insert(0, new ModelOld { Acode = "", Aname = "--Select Your Affiliate--" });
affiliateList1.myAffiliateList = affiliateList;
ViewBag.AffiliateData = affiliateList1.myAffiliateList;
return View();
}
[HttpPost]
public async Task<ActionResult> ImportAsync(string Acode, IEnumerable<ModelOld> myAffiliateList)
{
//Some Code
}
查看:Import.cshtml
@model ModelNew
<!DOCTYPE html>
<html>
<body>
@using (Html.BeginForm("Import", "UserInvitation", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="row">
<div class="form-group">
<div class="col-md-offset-3 col-md-10">
<label class="col-md-offset-3 col-md-2" title="Select Your Affiliate" style="font-size:large;"><b>Affiliate:</b></label>
<select id="affiliate" class="form-control" style="-webkit-appearance:listbox" asp-for="Acode" asp-items="@(new SelectList(ViewBag.AffiliateData,"Acode","Aname"))">
</select>
@Html.HiddenFor(m => m.myAffiliateList, htmlAttributes: new { @Value = ViewBag.AffiliateData })
</div>
</div>
</div>
<br />
<div class="row">
<div class="form-group">
<div class="col-md-offset-3 col-md-10">
<br />
<button type="submit" id="btnSubmitData" title="Click to Invite the Users" class="btn btn-info">
<i class="glyphicon glyphicon-upload"></i> Invite Users
</button>
</div>
</div>
</div>
}
</body>
</html>
这是一个完整的工作演示:
Model
public class ModelOld
{
public string Aname { get; set; }
public string Acode { get; set; }
}
public class AffiliateModel
{
public string Aname { get; set; }
public string Acode { get; set; }
}
public class ModelNew
{
public string Acode { get; set; }
public IEnumerable<ModelOld> myAffiliateList { get; set; }
}
看法
@model ModelNew
@{
var data = TempData["AffiliateData"] as string;
TempData.Keep("AffiliateData"); //be sure add this to persist the data....
var list = System.Text.Json.JsonSerializer.Deserialize<IEnumerable<ModelOld>>(data);
}
<!DOCTYPE html>
<html>
<body>
@using (Html.BeginForm("Import", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="row">
<div class="form-group">
<div class="col-md-offset-3 col-md-10">
<label class="col-md-offset-3 col-md-2" title="Select Your Affiliate" style="font-size:large;"><b>Affiliate:</b></label>
<select id="affiliate" class="form-control" style="-webkit-appearance:listbox" asp-for="Acode"
asp-items="@(new SelectList(list,"Acode","Aname"))"> @*change here....*@
</select>
</div>
</div>
</div>
<br />
<div class="row">
<div class="form-group">
<div class="col-md-offset-3 col-md-10">
<br />
<button type="submit" id="btnSubmitData" title="Click to Invite the Users" class="btn btn-info">
<i class="glyphicon glyphicon-upload"></i> Invite Users
</button>
</div>
</div>
</div>
}
</body>
</html>
Controller
[HttpGet]
public async Task<IActionResult> Index()
{
List<ModelOld> affiliateList = new List<ModelOld>();
ModelNew affiliateList1 = new ModelNew();
var affiliateMappingList = Configuration.GetSection("AffiliateMapping").GetChildren();
foreach (var KeyValuePair in affiliateMappingList)
{
affiliateList.Add(new ModelOld()
{
Aname = KeyValuePair.Key,
Acode = KeyValuePair.Value
});
}
affiliateList.Insert(0, new ModelOld { Acode = "", Aname = "--Select Your Affiliate--" });
affiliateList1.myAffiliateList = affiliateList;
//change here....
//or asp.net core 2.x,you could use NewtonSoft.Json -----JsonConvert.SerializeObject(affiliateList1.myAffiliateList);
TempData["AffiliateData"] = System.Text.Json.JsonSerializer.Serialize(affiliateList1.myAffiliateList);
return View();
}
[HttpPost]
public async Task<ActionResult> ImportAsync(string Acode)
{
var data = TempData["AffiliateData"] as string;
IEnumerable<AffiliateModel> myAffiliateList = System.Text.Json.JsonSerializer.Deserialize<IEnumerable<AffiliateModel>>(data);
return View();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.