Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 模型在POST中未完全绑定_C#_Asp.net Mvc_Post_Model View Controller_Model - Fatal编程技术网

C# 模型在POST中未完全绑定

C# 模型在POST中未完全绑定,c#,asp.net-mvc,post,model-view-controller,model,C#,Asp.net Mvc,Post,Model View Controller,Model,不明白我在这里监督什么。。。 我有一个在视图中渲染的模型 这是SubscriptionViewModel: public Subscription Subscription { get; set; } public DayOfWeek DayOfWeek { get; set; } public List<DateTime> SomeDates { get; set; } 这是正在触发的SubscriptionConteller方法: [AllowAnonymous] publ

不明白我在这里监督什么。。。 我有一个在视图中渲染的模型

这是SubscriptionViewModel:

public Subscription Subscription { get; set; }

public DayOfWeek DayOfWeek { get; set; }

public List<DateTime> SomeDates { get; set; }
这是正在触发的SubscriptionConteller方法:

[AllowAnonymous]
public ActionResult Subscribe(SubscriptionViewModel model, string date)
{
    return View();
}
帖子被触发,我的模型不为空,日期参数也具有正确的值,唯一丢失的是来自我的SubscriptionViewModel的订阅实体的参数。它们不是空的,但在最初进入视图时没有初始值

不知道我在监督什么,我试着在视图中使用
TempData.Keep()
(我以前从来没有这样做过),但这也不起作用

欢迎任何建议!
谢谢大家!

此答案假设您不希望订阅的值来自表单,而是希望保持最初将值发送到视图时的状态,这听起来像是您所追求的

您需要使用隐藏字段在表单中包含订阅的值(请参见示例1)。或者,您需要以与get方法相同的方式在post方法中填充订阅(参见示例2)

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

假设这是您的订阅类

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

希登菲尔德之路

控制器

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"
        };
    }
}
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 
    @Html.HiddenFor(x => x.Subscription.Id)
    @Html.HiddenFor(x => x.Subscription.Name)
    <input type="submit" value="submit" />
}
@model {The namespace}.SubscriptionViewModel

@using (Html.BeginForm("Subscribe", "Subscription", FormMethod.Post))
{     
    //Other fields 
    <input type="submit" value="submit" />
}
景色

@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" />
}
@model {The namespace}.SubscriptionViewModel

@using (Html.BeginForm("Subscribe", "Subscription", FormMethod.Post))
{     
    //Other fields 
    <input type="submit" value="submit" />
}
@model{The namespace}.SubscriptionViewModel
@使用(Html.BeginForm(“Subscribe”、“Subscription”、FormMethod.Post))
{     
//其他领域
}

您的数据检索是什么样子的?当您的表单中只有超链接时,post是如何触发的?@JasonRoner,您的意思是在呈现模型之前我是如何填充模型的?@DaveBarnett,@Html.ActionLink(“文本”、“取消订阅”…)指向应该发布模型的操作。我在网上的一个例子中看到了这一点。这会给你一个超链接,这意味着表单不会被发布。您将通过一个get请求进入subscribe方法,该请求可以工作,但不是正确的方式。我想首先用我填充的模型中的数据加载视图,视图的目的是让用户选择一个日期,帖子应该将该日期添加到模型中的初始数据中,因此我想我不应该使用@Html.ActionLink(…)但输入字段?将尝试此操作并发回,谢谢您的建议和信息!是的,这很有意义。将日期信息添加为隐藏字段。不客气!我这样做了,但我的控制器参数(模型)仍有空值.我不知道模型本身不是空的,只是模型的属性是未分配的…它似乎失去了值,但仍然保持它的实例(不是空的).有什么建议吗?好的,我把某些事情搞混了,需要重新考虑我所做的是好是坏。现在,我在加载和显示视图时,在模型中有我需要的所有值,除了我希望用户选择的日期。因此,我只有一个razor helper,HiddenFor允许我检索所选的日期(感谢您@Dave Barnett)但我不明白为什么我的模型在到达控制器时没有它的值,是因为我需要在Html.BeginForm(…)范围内定义所有模型的属性吗?是的,它需要在每个Html.BeginForm()中都有它们。