我是 MVC 的初學者并且被卡住了。我已經搜索但找不到解決方案!我正在從我的視圖中發布一個創建,但控制器無法驗證
If ModelState.IsValid Then
我使用跟蹤問題的行上的模型狀態
ModelState.Values.SelectMany(Function(v) v.Errors).Select(Function(b) b.ErrorMessage)
并收到這個
(0): "The ClientJobID field is required."
(1): "The EmployeeID field is required."
這兩個都應該來自視圖的“HiddenFor”行,但由于某種原因似乎傳遞了 null?
我的模型是:
Imports System
Imports System.Collections.Generic
Partial Public Class JobTimesheetT
Public Property JobTimesheetID As Integer
Public Property ClientJobID As Integer
Public Property EmployeeID As Integer
Public Property JobTaskID As Nullable(Of Integer)
Public Property TaskDate As Date
Public Property TotalHours As Nullable(Of Decimal)
Public Overridable Property ClientJobT As ClientJobT
Public Overridable Property EmployeeT As EmployeeT
Public Overridable Property JobTaskT As JobTaskT
End Class
控制器片段包括:
<HttpPost()>
<ValidateAntiForgeryToken()>
Function Create(<Bind(Include:="JobTimesheetID,ClientJobID,EmployeeID,JobTaskID,TaskDate)>
ByVal jobTimesheetT As JobTimesheetT" ) As ActionResult
'~~~~~~~~~~~~~~~~~~~~
'SET RETURN VARIABLES
'~~~~~~~~~~~~~~~~~~~~
ViewBag.JobTimesheetID = jobTimesheetT.JobTimesheetID
ViewBag.ClientJobID = jobTimesheetT.ClientJobID
ViewBag.EmployeeID = jobTimesheetT.EmployeeID
ViewBag.JobTaskID = New SelectList(db.JobTaskTs, "JobTaskID", "JobTaskName", jobTimesheetT.JobTaskID)
'~~~~~~~~~~~~~~~~~
'CHECK MODEL STATE
'~~~~~~~~~~~~~~~~~
If ModelState.IsValid Then '... Is not Valid!
視圖的一個片段是:
@ModelType xxx.JobTimesheetT
@Code
ViewData("Title") = "Add Time" 'Create
Layout = "~/Views/Shared/_Layout.vbhtml"
End Code
<h2>Add Time</h2>
<p> ClientJob id = @ViewBag.ClientJobID</p> 'Added these to confirm values loaded correctly
<p>Emp = @ViewBag.EmployeeID</p>
@Using (Html.BeginForm())
@Html.AntiForgeryToken()
@Html.HiddenFor(Function(model) model.ClientJobID, ViewBag.ClientJobID)
@Html.HiddenFor(Function(model) model.EmployeeID, ViewBag.EmployeeID)
@Html.Hidden("Client", ViewBag.Client)
@<div class="form-horizontal" style="Text-align: center; margin: 10px,auto,10px,Auto;">
<h4>Job Timesheet for: @ViewBag.Client</h4>
<hr />
@Html.ValidationSummary(True, "", New With {.class = "text-danger"})
<h3>Task</h3>
<div class="form-group" style="margin: 20px auto; width: 100%; display: inline-block">
<div class="TimeSheetElementWide">
@Html.DropDownList("JobTaskID", Nothing, "Select a Task", htmlAttributes:=New With {.class = "TimeSheetDrop ", .style = "width: 300px", .required = "required"})
@Html.ValidationMessageFor(Function(model) model.JobTaskID, "", New With {.class = "text-danger"})
</div>
</div>
... More fields here...
...
<div class="form-group" style="display:inline-block; margin: auto; width:100%; text-align:center">
<div>
<input type="Submit" value="Save" Class="list-group-item btn btn-info" style="margin: auto;color: #2c76eb;font-weight: bolder;width:40%; height:40px" />
</div>
</div>
</div>
End Using
那么為什么我不能將這些值系結并保存到表中呢?我真的很感激你有什么建議嗎?
uj5u.com熱心網友回復:
嘗試從您的控制器 GET 操作方法示例中傳遞 ViewBag.ClientJobID 和 ViewBag.EmployeeID 值,例如我正在發布。
<HttpGet()>
Function Create()
{
//your code
ViewBag.ClientJobID="Some value";
ViewBag.EmployeeID="Some value";
}
uj5u.com熱心網友回復:
很奇怪,但似乎需要我更好地定義 hiddenFor 的值。更改為:
@Html.HiddenFor(Function(model) model.ClientJobID, New With {.Value = ViewBag.ClientJobID})
@Html.HiddenFor(Function(model) model.EmployeeID, New With {.Value = ViewBag.EmployeeID})
啟用ModelState.IsValid回傳True。
這現在有效,但我不確定為什么以前沒有?也許有人可以啟發我?
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/503749.html
上一篇:IGROUPING物件的地址串列
