我是MVC的新手,我只是试图抓住我将在即将出现的项目中使用的MVC的某些方面。因此,我有一个视图,用户将输入有关培训的数据:名称,ID,位置和培训日期。我创建了将用于日期的部分视图,它包含了jQuery日期选择器和日期掩码。此pv将替换所需的日期字段。一切正常,但是,一旦用户点击“创建”或“编辑”按钮,我不知道如何将部分视图中的值传递回模型。
这是我的代码(编辑视图):
@Html.Partial("partialview", Model.ValueToPass)
对于局部视图:
@model Nullable<DateTime>
@{
string dt = string.Empty;
if (Model != null) { dt = Model.Value.tostring("MM/dd/yyyy"); }
<script type="text/javascript">.......</script>
<p> @Html.TextBox("Test", dt, new {@class = "DateTextArea"}) </p>
如上所述,我可以从加载到文本框中的模型中获得预先存在的日期,没有问题,它只是检索该值或新值(如果用户输入新日期)并将其放入数据库中。任何帮助或指导都会有很大帮助。谢谢。
答案 0 :(得分:2)
如果局部视图位于顶级页面的表单元素内,那么它将被回发,就好像它是原始表单的一部分一样。
将局部视图视为仅在渲染时使用。当您在浏览器中看到该页面时,将其视为一个完整页面(不是部分视图组)。因此,任何页面提交都将考虑到整个表单。
答案 1 :(得分:1)
使用@Html.TextBoxForModel
代替@Html.TextBox(....)
。这将导致使用正确的名称创建输入,以便在您发布页面时它将正确绑定到您的模型。
您不需要自己格式化日期,可以使用jQuery日期选择器上的dateFormat
选项格式化值。
如果您使用EditorForModel
而不是TextBoxForModel
,则会创建具有正确类型的输入,以使用日期选择器中内置的浏览器(如果可用)。然后,您可以使用Modernizr来测试是否支持日期,如果不支持则使用jQuery日期选择器。 Here is a decent tutorial about it
答案 2 :(得分:1)
您必须要知道,您在视图中使用C#和razor执行的任何操作都会在 HTTP响应之前发生。因此,一旦将响应发送给客户端,您的所有@Model.value
或@if(something) { @Html.Partial(...) }
语句都已转换为纯HTML。
从部分视图到主视图获取值的方法是使用jQuery:
想象一下主要观点:
@Html.HiddenFor(m=>m.ChosenName, new { id="hiddenGlobalName" }
和这样的部分视图:
<input type="text" id="partialNameField" />
<input type="button" value="Save and close popup" id="closeButton" />
<script>
$(function(){
$('#closeButton').click(function(){
var partialValue = $('#partialNameField').val(); // get the value
$('#hiddenGlobalName').val(partialValue); // "save" to main view
});
});
</script>
因为在 HTTP请求结束后将构建,所以在用户看到它时,您可以从任何包含的局部视图访问主视图的所有元素。
希望这可以帮到你!
答案 3 :(得分:1)
解决:
我要感谢你们每个人的意见,因为他们帮助我找到了解决方案。我遗漏的主要部分是:
@Html.Partial("partialview"), Model.ValueToSend, new ViewDataDictionary(ViewData) {
TemplateInfo = new System.Web.Mvc.TemplateInfo {HtmlFieldPrefix = "ValueToSend"
})
我在父视图上缺少templateinfo部分。此外,我确实将文本框更改为TextBoxFor并使用:
TextBoxFor(model => model, new { @class = .....)
不要使用model.Value,因为我之前有那个,并且仍然在回发时检索空日期值。解决方案代码不需要填充隐藏字段,templateinfo代码在部分视图中向输入字段添加id,并且父控制器自动抓取部分输入字段中的数据以发送到数据库,就好像它是父视图中其他自动生成的元素之一。
要使隐藏字段构思工作,在父视图上使用相同局部视图的倍数,将隐藏字段和日期文本字段(在此示例中)设置为相同的id;隐藏的字段,你把h放在它前面(例如日期和日期)。然后,您需要设置一个javascript变量来获取活动元素的ID
var id;
($(".datepickerclass").change(function(){
id = $(this).attr('id');
)}
此外,如果您正在使用日期选择器
$(".datepickerclass").datepicker(
.....
beforeShow:
id = $(this).attr('id')
然后将值添加到文本框的更改或模糊事件中或datepicker中的正确隐藏元素中:
onSelect:
var val = $(id).val()
$('#h'+ id).val(val)
请原谅,如果jQuery可能有点偏离,我关闭了我的开发机器并且我没有完全测试jQuery代码就输入了这个,但我认为你明白了。再次感谢所有的帮助。接下来将是一个jQuery网格。
编辑: 不幸的是,由于我的评分不够高,我无法提供所提供的答案,因为它们应该是。