使用Fiddler我可以看到请求甚至没有被发出但是我看不出原因。
以下是表格:
@using (Html.BeginForm("Index", "FileSystemChannelIndex", FormMethod.Post, new {
channelId = @Model.ChannelId }))
{
@Html.HiddenFor(model => model.Id)
@Html.HiddenFor(model => model.ChannelId)
<div class="editor-label">
Select File Source
</div>
<div class="editor-field">
@Html.DropDownListFor(
model => model.SelectedFileSourceValue,
new SelectList(Model.AvailableFilesSources, "Id", "Name"),
new { id = "selectFileSource" })
</div>
<p>
<input class="t-button" type="submit" value="Save" />
</p>
}
View最初来自:
public ViewResult Create(int channelId)
{
var channel = this.fullUOW.GetFileSystemChannelRepository().All.Where(c => c.Id == channelId);
var vm = new FileSystemChannelIndexViewModel(channelId, new FileSystemChannelIndex());
return View("Edit", vm);
}
我已经尝试将“name”属性添加到但是没有任何区别。
有什么想法吗?
编辑: Jim等人的更多信息......
域:
public class FileSystemChannel
{
public int Id {get; set; }
public ICollection<FileSystemChannelIndex> ChannelIndexes { get; set; }
}
public class FileSystemChannelIndex
{
public int Id { get; set; }
public FileSystemChannel ParentChannel { get; set; }
}
由于0 ... *关联,在UI中我们必须首先创建FileSystemChannel,然后向其添加FileSystemChannelIndex。这就是我将channelId传递给FileSystemChannelIndex创建视图的原因。提交新的FileSystemChannelIndex时,应调用以下操作:
[HttpPost]
public ActionResult Index(int channelId, FileSystemChannelIndexViewModel vm)
{
//TODO: get the Channel, add the Index, save to db
return View("Index");
}
答案 0 :(得分:3)
感谢Mark的评论,这是由于选择了失败的客户端验证。使用IE开发工具检查元素:
<select name="SelectedFileSourceValue" class="input-validation-error" id="selectFileSource" data-val-required="The SelectedFileSourceValue field is required." data-val-number="The field SelectedFileSourceValue must be a number." data-val="true">
答案 1 :(得分:1)
EMPO,
继上面的评论:
empo - 您可以将public ActionResult Create(////)
方法(即HttpPost
和HttpGet
)发布到问题中,因为这可以突出显示问题是否与模糊方法签名相关,我怀疑很可能是因为你回复了与HttpGet actionresult相同的签名
尝试添加适当的HttpPost动作结果:
[HttpPost]
public ActionResult Create(FileSystemChannelIndex domainModel)
{
if (!ModelState.IsValid)
{
return View(PopulateEditViewModel(domainModel));
}
_serviceTasks.Insert(domainModel);
_serviceTasks.SaveChanges();
return this.RedirectToAction("Edit", new {id = domainModel.ChannelId});
}
你原来的HttpGet(对我来说感觉'奇怪'):
[HttpGet]
public ViewResult Create(int channelId) {
var channel = this.fullUOW.GetFileSystemChannelRepository().All
.Where(c => c.Id == channelId);
var vm = new FileSystemChannelIndexViewModel(channelId,
new FileSystemChannelIndex());
return View("Edit", vm);
}
并在Edit actionresult中,您将根据传入的ID获取实体。可能会工作,可能不会。如果没有更全面的域名和逻辑图片,我们不确定。
显然,你自己的管道会有所不同,但这应该让我们知道应该预期的内容。答案 2 :(得分:0)
你在创造什么东西时怎么能有Model.Id?也许Model.Id为null,因为你无法发布