Javascript ActionLink中的一个参数没有';t传递给控制器
我和MVC5一起工作Javascript ActionLink中的一个参数没有';t传递给控制器,javascript,c#,asp.net-mvc,Javascript,C#,Asp.net Mvc,我和MVC5一起工作 其中一个参数(nrAccount)传递给控制器 另一个参数(manualDate)没有 我做错了什么 看法 文档的更新 公共作废更新(日期时间?手动日期,字符串帐户) { var toUpdate=GetByAccount(nrAccount); toUpdate.DATE_MANUAL=手动日期; _SaveChanges(); } 公共IEnumerable GetAll() { 返回_context.CustomersTable; } 公共CustomerTabl
- 其中一个参数(
)传递给控制器nrAccount
- 另一个参数(
)没有manualDate
文档的更新
公共作废更新(日期时间?手动日期,字符串帐户)
{
var toUpdate=GetByAccount(nrAccount);
toUpdate.DATE_MANUAL=手动日期;
_SaveChanges();
}
公共IEnumerable GetAll()
{
返回_context.CustomersTable;
}
公共CustomerTable GetByAccount(字符串nrAccount)
{
返回GetAll().FirstOrDefault(k=>k.FOPKTO\u ACCOUNT\u==nrcount);
}
没有出现错误,只是数据库中没有保存任何内容。调试代码时,我看不到传递给变量manualDate
的日期,不知道为什么。但是nrcount
传递正确
用户可以选择日期选择器:
问题在于,当您应该使用POST时,您正在使用GET请求。GET包含帐户,但不包含日期文本框中的日期,因为它只包含初始值,而不包含用户将其更改为的值。因此,要修复此问题,您应该通过进行以下更改来更改您的GET to a post
请更正您的表单操作,它也有一个括号,即@Url.action(“更新”、“主页”)
,而不是@Url.action(“更新”、“主页”)
将HttpPost
属性添加到控制器中的Update
方法
如评论中所述,将您的@Action.Link替换为GET,并使用submit按钮生成帖子
这样,您就可以获得帐号,并为此添加一个隐藏字段
最后,由于textboxfor的工作方式,您需要更改更新方法以接收具有帐户
和付款日期
属性的对象
这里有一些与您的非常相似的演示代码,向您展示我的意思
视图模型
public class HomeViewModel
{
public string Account { get; set; }
public DateTime? PaymentDate { get; set; }
}
控制器
public class HomeController : Controller
{
public ActionResult Index()
{
var item = new HomeViewModel
{
Account = "theAccountNumber",
PaymentDate = null
};
var viewModel = new List<HomeViewModel>()
{
item
};
return View(viewModel);
}
[HttpPost]
public ActionResult Update(HomeViewModel item)
{
//call your _docs method here
return RedirectToAction("Index");
}
}
公共类HomeController:控制器
{
公共行动结果索引()
{
var item=新的HomeViewModel
{
Account=“theAccountNumber”,
PaymentDate=null
};
var viewModel=新列表()
{
项目
};
返回视图(viewModel);
}
[HttpPost]
公共操作结果更新(HomeViewModel项目)
{
//在这里调用您的_docs方法
返回操作(“索引”);
}
}
视图(注意帐户的隐藏字段)
@型号列表
@foreach(模型中的var项目)
{
@DisplayFor(modelItem=>item.Account)
@Html.HiddenFor(modelItem=>item.Account)
@Html.TextBoxFor(modelItem=>item.PaymentDate,新的{@type=“date”,@class=“form control datepicker”})
}
按照我的示例,当单击“保存”时,表单中的所有数据都将发布到服务器,并根据需要使用默认模型绑定放入模型。您是否可以检查更改@Html.ActionLink(“保存”、“更新”、“主页”、新建{nrcount=item.Account,manualDate=item.PaymentDate},null)
使用
?如果您将日期时间更改为不可为空,是否有效?@noobprogrammer好的,但我如何添加路由参数以提交?@Ben我想我不能。我返回到我的模型(然后传递给视图)一些日期列,这些列在数据库中为空,所以我需要使它们在模型中为空。它仍然不起作用。我需要将值从文本框传递到控制器。ManualDate列中db中几乎所有的值都是null,这就是为什么这里返回null并将该null传递给控制器。问题是我怎样才能把这个文本框中的值(用户选择的日期)传递给控制器,我怎样才能做到呢?我用BeginForm试试这个。不幸的是,仍然出现了一些错误,返回了空值。我会和公司的开发人员谈谈。无论如何,谢谢你的帮助!
public class HomeViewModel
{
public string Account { get; set; }
public DateTime? PaymentDate { get; set; }
}
public class HomeController : Controller
{
public ActionResult Index()
{
var item = new HomeViewModel
{
Account = "theAccountNumber",
PaymentDate = null
};
var viewModel = new List<HomeViewModel>()
{
item
};
return View(viewModel);
}
[HttpPost]
public ActionResult Update(HomeViewModel item)
{
//call your _docs method here
return RedirectToAction("Index");
}
}
@model List<AccountDate.Controllers.HomeViewModel>
<table>
@foreach (var item in Model)
{
<form action="@Url.Action("Update", "Home")" method="post">
<tr>
<td>
@Html.DisplayFor(modelItem => item.Account)
@Html.HiddenFor(modelItem => item.Account)
</td>
<td class="choice">
@Html.TextBoxFor(modelItem => item.PaymentDate, new { @type = "date", @class = "form-control datepicker" })
</td>
<td>
<input type="submit" value="Save" />
</td>
</tr>
</form>
}
</table>