模型在POST中未完全绑定

不了解我在这里的监督... 我有一个在视图中渲染的模型。

这是SubscriptionViewModel:

public Subscription Subscription { get; set; }

public DayOfWeek DayOfWeek { get; set; }

public List<DateTime> SomeDates { get; set; }

在视图中,我用SubscriptionViewModel中的数据填充了一个表。 在每个表行中都有一个If / else语句,在每个部分中我都放置了一个Form,以便可以将数据发布回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",FormMethod.Post))
    {                                                                   
        @Html.actionLink("text","UnSubscribe",new { @class = "btn btn-danger btn-radius" })
    }
}

这是被触发的SubscriptionContoller方法:

[AllowAnonymous]
public actionResult Subscribe(SubscriptionViewModel model,string date)
{
    return View();
}

触发POST,并且我的模型不为NULL, date 参数也具有正确的值,唯一丢失的是 Subscription 中的参数我的SubscriptionViewModel。它们不是NULL,但最初进入View时只是没有初始值...

不知道我要监视什么,我尝试在视图中使用TempData.Keep()(以前从未做过),但这也不起作用。

欢迎任何建议! 谢谢!

harry898 回答:模型在POST中未完全绑定

此答案假定您不希望Subscription的值来自表单,而是保持原样,将这些值最初发送到视图时听起来像是您想要的。

您需要使用隐藏字段在表单中包括订阅的值(请参见示例1)。另外,您将需要按照与get方法中相同的方式在post方法中填充预订(请参见示例2)。

这里有两个简单的例子,说明了我的意思

假设这是您的订阅课程

public class Subscription
{
    public int Id { get; set; }
    public string Name { get; set; }
}

示例1

HiddenField方式

控制器

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

以控制器方式返回

控制器

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,FormMethod.Post))
{     
    //Other fields 
    <input type="submit" value="submit" />
}
本文链接:https://www.f2er.com/3128673.html

大家都在问