ASP.如何将数据从控制器传递到视图并返回到控制器



我试图将数据从控制器发送到视图,然后我试图将数据返回到另一个操作。

在我的情况下,我试图发送一个视图与模型和datay(日期,Id,房间)从控制器。在视图中,我想将Name值添加到提交的模型中,然后将整个模型发送回下一个控制器动作。问题是,在下一个操作中,只显示Name值,而其他值为空。有人知道该怎么做吗?

模型使用。

public class ReservationModel
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public DateTime Cas { get; set; }
public RoomModel Room { get; set; }
}

显示带有数据Cas, Id和Room的View

[HttpGet]
[Route("Home/Room/Create_reservation")]
public async Task<IActionResult> CreateReservation(DateTime date)
{
ReservationModel reservation = await _reservation.PrepareModel(date, _id);
return View(reservation);
}

我想要添加Name value的视图并把它整个发回。

@model ReservationModel

<form asp- asp-controller="Home" asp-action="CreateReservation" method="post">
<input required="required" type="text" class="form-control scan" placeholder="Name"
asp-for="Name" />
<span asp-validation-for="Name" class="text-danger"></span>
<input type="submit" class="model-close button btn btn-primary primary-btn"
style="width:auto;" value="Add" />
</form>

在调试中显示reservationModel只有Name数据,其他数据为null。

[HttpPost]
[Route("Home/Room/Create_reservation")]
public IActionResult CreateReservation([Bind("Name","Room","Cas","Id")] ReservationModel reservationModel)
{
return View();
}

如果您想要传输模型中的每个字段,那么您需要为模型中的每个字段输入。目前您只有有一个Name输入:

<input required="required" type="text" class="form-control scan" placeholder="Name" asp-for="Name" />

由于您只发送Name值,那么只发送Name值。

基于以上注释:

我只是试图添加名称值从CreateReservation数据我已经发送,并在Post操作整个模型保存到数据库。

然后有两个您想要的数据,NameId。包括Id作为另一个输入:

<input type="hidden" asp-for="Id" />

然后在结果控制器动作中,您将拥有NameId.可以论证的是您应该为此创建一个自定义视图模型,而不是使用相同的模型,只是为了避免将来的混淆。但为了简洁起见,这里将使用相同的模型。它只会填充这两个属性,因为它们是你要填充的唯一两个属性。

在控制器操作中,您将使用Id值再次从数据中获取整个模型。然后,您将使用输入提供的Name更新模型实例,并重新保存获取的模型实例。

做一些假设,但只是为了说明:

[HttpPost]
[Route("Home/Room/Create_reservation")]
public IActionResult CreateReservation([Bind("Name","Id")] ReservationModel reservationModel)
{
// fetch from the db
var existingModel = _context.Reservations.Single(r => r.Id == reservationModel.Id);
// update the value
existingModel.Name = reservationModel.Name;
// save
_context.SaveChanges();
// as an aside, this should probably be a redirect and not a view
return View();
}

毕竟,如果您不希望客户端对其进行任何操作,甚至不希望看到它,为什么要将所有数据发送给客户端,然后再返回给服务器呢?即使填充隐藏的表单字段,您仍然给客户端能力编辑所有其他数据。(这意味着值得注意的是,客户端可以编辑id,所以您需要执行某种授权,以确保他们没有编辑他们不允许编辑的对象。)

最新更新