gpt4 book ai didi

c# - POST 请求并获取设置操作 MVC

转载 作者:太空宇宙 更新时间:2023-11-03 15:57:27 25 4
gpt4 key购买 nike

我似乎无法弄清楚这一点,但我确信这很简单。每当我按下“更新/保存”按钮时,我的代码都会转到我的 Order 类来执行 {get;set}。但是,它将我的 PhonePrimary 字段作为“null”传递,这会导致错误。

下面是EditOrder.cshtml页面

       @using (Html.BeginForm())
{
<div class="form-group-PhonePrimary">
<div class="input-group" style="border-right:0px">
<span class="input-group-addon" style="text-align: left; border-right: 0px; min-width: 115px">Phone #</span>
@Html.TextBoxFor(model => model.order.PhonePrimary, new { @class = "form-control", @maxlength = "13" })
@Html.ValidationMessageFor(model => model.order.PhonePrimary)
</div>
</div>

<div class="form-group" style="padding-left:5px">
<div class="btnUpdateSave">
<input type="submit" value="Update/Save" class="btn btn-primary col-md-10" />
</div>
</div>
}

下面是订单类。

public class Order
{
private string _PhonePrimary;
[DisplayName("Phone Primary")]
public string PhonePrimary
{
get
{
//this._PhonePrimary = BeautifyPhoneNumber(this._PhonePrimary);

return BeautifyPhoneNumber(this._PhonePrimary);
}
set
{
this._PhonePrimary = value;
}
}
}

这是在 EditOrder.cshtml 页面中使用的 EditOrderViewModel

public class EditOrderViewModel
{
public Order order { get; set; }
public List<Status> StatusOptions { get; set; }
public IEnumerable<Document> Documents { get; set; }
public IEnumerable<Notary> Notaries { get; set; }
public Notary NotaryAssigned { get; set; }
}

下面是SchedulingController.cs中的httpget和httppost

        [HttpGet]
public ActionResult EditOrder(int id)
{
var model = repositoryScheduling.Order_FindById(id);//returns EditOrderViewModel

model.NotaryAssigned = repositoryScheduling.Notary_FindAssignedNotary(model.order.Id);

return View(model);
}
[HttpPost]
public ActionResult EditOrder(EditOrderViewModel orderModel)
{
try
{
repositoryScheduling.Order_Update(orderModel);
return RedirectToAction("OrderIndex");
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
return View();
}
}

这是在 SchedulingREpository.cs 中找到的 Order_FindById 函数。我正在使用 Dapper 来帮助执行 SQL 命令。

    public EditOrderViewModel Order_FindById(int id)
{
var parameters = new DynamicParameters();

parameters.Add("@ID", value: id);

var query = @"long query string that i dont want to put";

using (var multi = this.db.QueryMultiple(query, parameters))
{
EditOrderViewModel editVM = new EditOrderViewModel();
editVM.order = multi.Read<Order>().SingleOrDefault();
editVM.StatusOptions = multi.Read<Status>().ToList();
editVM.Documents = multi.Read<Document>().ToList();
return editVM;
}
}

每当我切换到使用 model.order._PhonePrimary 而不是当前代码中的那个 (model.order.PhonePrimary) 时。我没有收到任何错误,但是我的 BeautifyNumber() 从未被触发。

最佳答案

确保在将模型分配给 View 之前实例化 Order 属性。

例如:

public ActionResult EditOrder() {
var vm = new EditOrderViewModel();
vm.Order = new Order();
return View(vm);
}

编辑:在你的仓库中试试这个:

editVM.order = multi.Read<Order>().SingleOrDefault() ?? new Order();

编辑 2:这可能是模型绑定(bind)问题。您可以考虑为您的 POST 操作使用自定义模型 Binder ,或者您可以通过直接在 View 模型中引用 PhonePrimary 来绕过对 Order 嵌套类的需要,并让您的 repo 负责在 POST 之后将其填充和消化到 Order 条目.

关于c# - POST 请求并获取设置操作 MVC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22970609/

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