gpt4 book ai didi

c# - 将 View 中的模型数据传输到 Controller

转载 作者:行者123 更新时间:2023-11-30 17:01:54 25 4
gpt4 key购买 nike

我在 View 中使用了一个充满数据的模型。然后在 View 中编辑此数据。我需要找出一种方法将这些数据重新提交回 Controller 。

这是我目前所拥有的。

查看:

@using (Html.BeginForm("DownloadCSV", "Respondents", FormMethod.Post))
{
@Html.HiddenFor(m => m.FilterSet)

<div class="btn btn-default pull-right" id="dispoCSV" onclick="$('#csvFormSubmit').click()">
<i class="icon-file-alt"></i> Disposition Report
</div>
<input id="csvFormSubmit" type="submit" style="display:none;" />
}

Controller :

[HttpPost]
public ActionResult DownloadCSV(RespondentsFilterSet model)
{
string csv = "Charlie, Test";
return File(new System.Text.UTF8Encoding().GetBytes(csv), "text/csv", "DispositionReport.csv");
}

型号:

public class RespondentsFilterSet : ColdListFilterSet
{
public List<int> OwningRecruiters { get; set; }

public List<int> RecruitingGroups { get; set; }

public override bool HasAtLeastOneFilter()
{
return base.HasAtLeastOneFilter() || OwningRecruiters.IsNotNullOrEmpty() || RecruitingGroups.IsNotNullOrEmpty();
}

public override ExpressionBase ToExpression()
{
var expr = base.ToExpression();

var expressions = expr == null ? new List<ExpressionBase>() : new List<ExpressionBase> { expr };

if (OwningRecruiters.IsNotNullOrEmpty())
{
expressions.Add(new InExpression<int> { Field = Create.Name<Respondent>(r => r.RecruitedBy), Values = OwningRecruiters });
}

if (RecruitingGroups.IsNotNullOrEmpty())
{
expressions.Add(new InExpression<int> { Field = Create.Name<Respondent>(r => r.RecruitingGroupId), Values = RecruitingGroups });
}

return expressions.Count == 0 ? null : BuildAndExpressionFromList(expressions);
}
}

我意识到我的 Controller 还没有最终确定。我只是显示了一些静态 csv。但是我无法弄清楚为什么我的模型在返回到 Controller 时始终为 null。

最佳答案

看看你的表格。没有一个输入元素(提交按钮除外)。在这种情况下,您不能指望在服务器上取回任何东西。

请阅读有关 HTML 以及表单如何在 HTML 中工作的内容。在 HTML 表单中,您有输入字段。诸如文本字段、隐藏字段、复选框、单选按钮...之类的内容 - 用户与之交互的字段被提交到服务器。

您已经使 HttpPost Controller 操作采用某个模型作为参数这一事实并不意味着该参数将被初始化。在 ASP.NET MVC 中,您有一个默认的模型绑定(bind)器。该模型绑定(bind)器查看提交表单时作为值发送到服务器的内容,并使用字段名称绑定(bind)到相应的属性。如果表单中没有输入字段,则不会向服务器发送任何内容。只需使用网络浏览器中内置的调试工具来检查究竟发送到服务器的内容。

与经典的 ASP.NET WebForms 不同,ASP.NET MVC 是无状态的。没有 ViewState 可以记住您的模型。

所以所有这些漫无边际的意思是说,在进入 ASP.NET MVC 之前,您应该首先阅读更多有关 HTML 表单的内容,并了解 Web 的无状态性质。就您的特定问题而言,假设用户不应该在某些输入字段中修改 View 中 View 模型的任何值,您可以简单地在表单中包含一个包含模型 ID 的隐藏字段。然后,此 ID 将作为参数发送到您的 POST Controller 操作,您可以使用它从存储它的任何地方(我猜是数据库或其他东西)检索您的原始模型。

关于c# - 将 View 中的模型数据传输到 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20505574/

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