[英]Model not completely binding in POST
不明白我在這里監督什么......我有一個 Model 我在視圖中呈現。
這是訂閱視圖模型:
public Subscription Subscription { get; set; }
public DayOfWeek DayOfWeek { get; set; }
public List<DateTime> SomeDates { get; set; }
在視圖中,我使用來自 SubscriptionViewModel 的數據填充了一個表。 在每個表行中都有一個 If/else 語句,在每個部分中我放置了一個表單,以便可以將數據回發到 SubscriptionController,這是一個偽示例:
if (condition)
{
using (Html.BeginForm("Subscribe", "Subscription", FormMethod.Post))
{
@Html.ActionLink("text", "Subscribe", new { @date = item }, new { @class = "btn btn-warning btn-radius" })
}
}
else
{
using (Html.BeginForm("UnSubscribe", "Subscription", FormMethod.Post))
{
@Html.ActionLink("text", "UnSubscribe", new { @date = item }, new { @class = "btn btn-danger btn-radius" })
}
}
這是被觸發的 SubscriptionContoller 方法:
[AllowAnonymous]
public ActionResult Subscribe(SubscriptionViewModel model, string date)
{
return View();
}
POST被觸發,我的Model不是NULL,日期參數也有正確的值,唯一丟失的是來自我的SubscriptionViewModel的Subscription Entity的參數。 它們不是 NULL 但最初進入視圖時它們只是沒有初始值......
不知道我在監督什么,我嘗試在視圖中使用TempData.Keep()
(我以前從來不需要這樣做),但這也不起作用。
歡迎任何建議! 謝謝!
此答案假定您不希望 Subscription 的值來自表單,而是在最初將值發送到聽起來像您所追求的視圖時保持原樣。
您需要使用隱藏字段在表單中包含訂閱值(參見示例 1)。 或者,您需要以與 get 方法相同的方式在您的 post 方法中填充訂閱(參見示例 2)。
這里有 2 個簡單的例子來說明我的意思
假設這是您的訂閱 class
public class Subscription
{
public int Id { get; set; }
public string Name { get; set; }
}
示例 1
HiddenField 方式
controller
public class SubscriptionController : Controller
{
[AllowAnonymous]
public ActionResult Subscribe()
{
var viewModel = new SubscriptionViewModel
{
Subscription = GetSubscription()
};
return View(viewModel);
}
[AllowAnonymous]
[HttpPost]
public ActionResult Subscribe(SubscriptionViewModel model, string date)
{
return View();
}
private Subscription GetSubscription()
{
return new Subscription
{
Id = 1,
Name = "My Subscription"
};
}
}
風景
@model {The namespace}.SubscriptionViewModel
@using (Html.BeginForm("Subscribe", "Subscription", FormMethod.Post))
{
//Other fields
@Html.HiddenFor(x => x.Subscription.Id)
@Html.HiddenFor(x => x.Subscription.Name)
<input type="submit" value="submit" />
}
示例 2
以 controller 方式返回
controller
public class SubscriptionController : Controller
{
[AllowAnonymous]
public ActionResult Subscribe()
{
var viewModel = new SubscriptionViewModel
{
Subscription = GetSubscription()
};
return View(viewModel);
}
[AllowAnonymous]
[HttpPost]
public ActionResult Subscribe(SubscriptionViewModel model, string date)
{
model.Subscription = GetSubscription();
return View();
}
private Subscription GetSubscription()
{
return new Subscription
{
Id = 1,
Name = "My Subscription"
};
}
}
風景
@model {The namespace}.SubscriptionViewModel
@using (Html.BeginForm("Subscribe", "Subscription", FormMethod.Post))
{
//Other fields
<input type="submit" value="submit" />
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.