gpt4 book ai didi

c# - MVC5 ViewModel 不回发到 Controller

转载 作者:太空狗 更新时间:2023-10-29 22:32:34 25 4
gpt4 key购买 nike

所以,我有一个 Controller / View / View 模型的问题。它类似于 this issue我认为。基本上,我有一个从我的 Controller 发送到 View 的 View 模型。在将整个困惑发送回 Controller 后操作之前,有些项目会显示,然后是一些额外的字段供用户操作。当我在帖子中取回数据时,所有 View 模型都是空的。

所以,事不宜迟,这里有一些代码要看:

View 模型:

public class ASideReceivingViewModel
{
public PurchaseOrderLine poLine;
public ReceivingItem receivingItem;

public Dictionary<string, string> TankerOrRailcarOptions { get; set; }

public ASideReceivingViewModel()
{
TankerOrRailcarOptions = new Dictionary<string, string>();
TankerOrRailcarOptions.Add("R", "Railcar");
TankerOrRailcarOptions.Add("T", "Tanker");

}

}

Controller 操作:

public ActionResult Receive(string strOrdNo, short? shtLineNo)
{

//if there isn't a selected po line, then shoot them back to the first page
if (strOrdNo == null || !shtLineNo.HasValue) return RedirectToAction("Index");

PurchaseOrderService poService = new PurchaseOrderService();
ReceivingItemService s = new ReceivingItemService(p);

ASideReceivingViewModel vm = new ASideReceivingViewModel();


vm.poLine = poService.GetOpenPurchaseOrderLines().Where(po => po.Ord_no == strOrdNo &&
po.Line_no == shtLineNo).FirstOrDefault();

if (vm.poLine == null) return RedirectToAction("Index");

vm.receivingItem = s.CreateNewReceivingItem(vm.poLine);

return View(vm);

}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Receive(ASideReceivingViewModel mytestvm)
{
if (ModelState.IsValid && mytestvm.receivingItem != null)
{
ReceivingItemService s = new ReceivingItemService(p);
s.Update(mytestvm.receivingItem);
return RedirectToAction("Index");

}

return View(mytestvm);
}

查看:

@model FSIApps.Presentation.Models.ASideReceivingViewModel
<div class="row">
@{Html.RenderPartial("POLineDetails", Model.poLine);}
</div>

@using (Html.BeginForm("Receive", "Receiving", FormMethod.Post))
{
@Html.HiddenFor(model => model.receivingItem.Id)
<div class="row">
<div class="col-md-8 col-md-offset-2">
<div class="row">
@Html.AntiForgeryToken()
<div class="col-md-6">
<div class="form-group">
<label for="receivingItem_Batch_number">Batch Number</label>
@Html.TextBoxFor(model => model.receivingItem.Batch_number, new { @class = "form-control" })
<span class="help-block">*Also the Vendor Lot Number on the BOL</span>
</div>
</div>

<div class="col-md-6">
<div class="form-group">
<label for="receivingItem_Qty_received">Qty Received</label>
@Html.TextBoxFor(model => model.receivingItem.Qty_received, new { @class = "form-control" })
<span class="help-block">*Qty shown on BOL</span>
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="receivingItem_Carrier">Carrier</label>
@Html.TextBoxFor(model => model.receivingItem.Carrier, new { @class = "form-control" })
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="receivingItem_">Tanker or Railcar</label>
@Html.DropDownListFor(m => m.receivingItem.Tanker_or_railcar, new SelectList(Model.TankerOrRailcarOptions, "Key", "Value", Model.receivingItem.Tanker_or_railcar), new { @class = "form-control" })
</div>
</div>
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="receivingItem_Railcar_number">Railcar Number</label>
@Html.TextBoxFor(model => model.receivingItem.Railcar_number, new { @class = "form-control" })
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="receivingItem_Manifest_number">Manifest Number</label>
@Html.TextBoxFor(model => model.receivingItem.Manifest_number, new { @class = "form-control" })
</div>
</div>
</div>

<div class="row">
<div class="col-md-6">
<div class="form-group">
<input type="submit" value="Save" class="btn btn-success" />
</div>
</div>
</div>
</div>
</div>
}

我不一定关心我发送到局部 View 的数据,但是当我回发常规表单时,我没有在 ViewModel 中设置任何内容。在另一篇文章中,他们讨论了命名发送回 Controller 的参数的问题,但是在我的 @Html.BeginForm() 中设置值的组合似乎没有用。

这里有人对我有什么建议吗?

编辑:

Visual Studio Break

Fiddler Data

最佳答案

要使用自动模型绑定(bind),您应该使用属性而不是 View 模型中的字段。希望这可以解决问题:

public class ASideReceivingViewModel
{
public PurchaseOrderLine poLine { get; set; };
public ReceivingItem receivingItem { get; set; };
...
}

关于c# - MVC5 ViewModel 不回发到 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20427126/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com