MrJ*_*rJD 4 post controller razor asp.net-mvc-3
好吧,伙计们,需要一些帮助!
我正在使用asp.net mvc3 razor(我相当新,但做了很多网页表单)
好的,这个问题
我的问题围绕提交视图.我有一个非常复杂的模型,我的视图基于此(强类型).
我想将模型返回到控制器的HttpPost方法中的参数.基本上做:
public ActionResult Personal()
{
DataModel dataModel = new DataModel();
FormModel model = new FormModel();
model.candidateModel = dataModel.candidateModel;
model.lookupModel = new LookupModel();
return View(model);
}
[HttpPost]
public ActionResult Personal(FormModel formModel)
{
if (ModelState.IsValid)
{
//stuff
}
return View(formModel);
}
Run Code Online (Sandbox Code Playgroud)
现在......
我无法在post方法的formModel参数中获取值.
这工作(意味着我可以看到值)但是很繁琐,因为我必须准确地写出每个字段在字符串中的位置:
@Html.TextBox("formModel.candidateModel.tblApplicant.FirstName", Model.candidateModel.tblApplicant.FirstName)
Run Code Online (Sandbox Code Playgroud)
它呈现如下:
<input name="formModel.candidateModel.tblApplicant.FirstName" id="formModel_candidateModel_tblApplicant_FirstName" type="text" value="Graeme"/>
Run Code Online (Sandbox Code Playgroud)
这不起作用:
@Html.TextBoxFor(c => c.candidateModel.tblApplicant.FirstName)
Run Code Online (Sandbox Code Playgroud)
它呈现如下:
<input name="candidateModel.tblApplicant.FirstName" id="candidateModel_tblApplicant_FirstName" type="text" value="Graeme"/>
Run Code Online (Sandbox Code Playgroud)
现在我假设问题在于id的差异
所以请回答我:
快速澄清:当我说textboxfor无法正常工作时,它会在我获取表单时获取值.所以他们填写,但在POST /提交,我无法在参数中的formModel中看到它们.
另一方面说明:
没有html助手工作,这就是问题所在.它们也没有出现在模型状态中.
谢谢大家的帮助
答案:
html.TextBoxFor和html.Textbox,POSTing值,参数模型
在我的视图中,这是一个问题,我在这个答案中用片段替换了所有代码并且它有效.
再次感谢你
我是以正确的方式来做这件事的
是.
为什么textboxfor没有得到正确的值/ id,以及如何让它获得正确的值/ id以便我可以在POST中检索它(如果这甚至是问题)?
您的代码中还有其他内容使其无效.由于您没有显示所有代码,因此很难说.这是一个完整的工作示例,它说明并证明您的代码还有其他内容:
模型:
public class FormModel
{
public CandidateModel candidateModel { get; set; }
}
public class CandidateModel
{
public Applicant tblApplicant { get; set; }
}
public class Applicant
{
public string FirstName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View(new FormModel
{
candidateModel = new CandidateModel
{
tblApplicant = new Applicant
{
FirstName = "fn"
}
}
});
}
[HttpPost]
public ActionResult Index(FormModel formModel)
{
// the username will be correctly bound here
return View(formModel);
}
}
Run Code Online (Sandbox Code Playgroud)
视图:
@model FormModel
@using (Html.BeginForm())
{
@Html.EditorFor(c => c.candidateModel.tblApplicant.FirstName)
<button type="submit">OK</button>
}
Run Code Online (Sandbox Code Playgroud)
此外,似乎textboxfor是限制性的,如果你有一个日期时间,你如何使用.toshortdate()方法?这让我觉得textboxfor对我没用.
我同意这TextBoxFor是限制性的.这就是为什么我会建议你总是使用EditorFor而不是TextBoxFor.它允许您使用[DisplayFormat]属性和voilà 简单地装饰您的视图模型属性.你得到任何你喜欢的格式.
例如:
public class MyViewModel
{
[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
public DateTime CreatedAt { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
并在视图中:
@model MyViewModel
@Html.EditorFor(x => x.CreatedAt)
Run Code Online (Sandbox Code Playgroud)
将完全按照您的预期格式化日期.
| 归档时间: |
|
| 查看次数: |
24063 次 |
| 最近记录: |