controller如下:
public ActionResult QueryInfo(AViewModel vm)
{
if(string.IsNullOrWhiteSpace(vm.QUERY_DATE))
vm.QUERY_DATE = DateTime.Today.ToString("yyyyMMdd");//沒有輸入 日期查詢 帶今天日期
vm.HeaderList = db.QueryHeaderList(vm.QUERY_DATE);
return View(vm);
}
public ActionResult QueryInfo()
{
var vm = new AViewModel();
string qDate = DateTime.Today.ToString("yyyyMMdd");//第一次沒有資料 所以帶今天日期
vm.QUERY_DATE = qDate;
vm.HeaderList = db.QueryHeaderList(qDate);
return View();
}
view 如下:
@using (Html.BeginForm("QueryInfo", "QueryInfo", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true, "", new { })
<table style="width:100%; border-spacing:0;">
<tr>
<th class="header">@Html.LabelFor(model => model.QUERY_DATE)</th>
<td>
@Html.TextBoxFor(model => model.QUERY_DATE)
@Html.ValidationMessageFor(vm => vm.QUERY_DATE, "", new { })
</td>
<th class="header"> </th>
<td> </td>
</tr>
<tr>
<td colspan="4" align="right"><input type="submit"></td>
</tr>
<tr>
<td colspan="4" align="center">
<table style="width:95%; border-spacing:0;">
<thead>
<tr>
<td class="header">料號</td>
<td class="header">批次</td>
<td class="header">日期</td>
<td class="header">狀態</td>
<td class="header">訊息</td>
</tr>
</thead>
@foreach (var item in Model.HeaderList)
{
<tr>
<td>@item.MATERIAL</td>
<td>@item.BATCH</td>
<td>@item.MO_DAT</td>
<td>@item.STATUS</td>
<td>@item.MSG</td>
</tr>
}
</td>
</tr>
</table>
在第一次進來 ,會去執行controller ==> public ActionResult QueryInfo(),查詢日期(QUERY_DATE)會帶出來(今天)
當使用者按下查詢送出 ,會去執行controller ==> public ActionResult QueryInfo(AViewModel vm)
請問
那使用者 QUERY_DATE 沒有輸入,是空的,那controller 內加入判斷,自動加入今天日期
為什麼畫面上不會有帶出日期(QUERY_DATE)?
前端要加上
@model Model命名空間.AViewModel
使用的時候
@Model.XXX(變數或方法名稱)
p.s. 你應該不會單純到直接把這些文字複製貼上吧, 然後問我為什麼不能用吧...
可以參考 我的鐵人賽文章
加了,怎麼可能沒有加,
沒有加第一次 Default 的,帶出今天日期就會出錯。
現在是當使用者,將日期清除,點選送出
在controller 有去判斷是否由時間,沒有就自動帶出今天日期
if(string.IsNullOrWhiteSpace(vm.QUERY_DATE))
vm.QUERY_DATE = DateTime.Today.ToString("yyyyMMdd");//沒有輸入 日期查詢 帶今天日期
vm.HeaderList = db.QueryHeaderList(vm.QUERY_DATE);
return View(vm);
自動帶出今天日期,前端帶不出來?
很少用這種方式,直接用Html標籤不會有這個問題,
找到資料了,這是ASP.NET MVC的問題,
可以參考 這一篇
解決方法
@Html.TextBoxFor(model => model.QUERY_DATE, new { Name = "vm.QUERY_DATE" } )
vm是你後端接收的Model名稱,在Html這一行會變成
<input name="vm.QUERY_DATE" id="QUERY_DATE" type="text" value="20180621">
老實說我對MVC不太熟
我早上看到也是一直在玩為什麼會有你說得這狀況
說一下我試出的狀況
我的controller
public ActionResult Index()
{
ViewModel vm = new ViewModel();
vm.name = "name";
vm.phone = "phone";
return View(vm);
}
[HttpPost]
public ActionResult Index(ViewModel vm)
{
var result = new ViewModel();
result.name = "postName";
result.phone = "postPhone";
return View(result);
}
我的View
@model WebApplication1.Models.ViewModel
@{
ViewBag.Title = "Home Page";
}
<div class="row">
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
<h3>Name: @Html.TextBoxFor(model => model.name)</h3>
<h3>Phone: @Html.TextBoxFor(model => model.phone)</h3>
<input type="submit" value="送出" />
}
<h3>Name: <input value="@Model.name" /> </h3>
<h3>Phone: @Html.TextBoxFor(model => model.phone)</h3>
</div>
上面我故意多寫的同樣ViewModel在Form外面
然後一個是小魚說的@Model.XXX(變數或方法名稱)
測試結果小魚說的那個會改變
然後我刪掉Form裡面的phone的ViewModel
改成這樣
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
<h3>Name: @Html.TextBoxFor(model => model.name)</h3>
<input type="submit" value="送出" />
}
<h3>Name: <input value="@Model.name" /> </h3>
<h3>Phone: @Html.TextBoxFor(model => model.phone)</h3>
測試結果Form外面的phone值也會變了...
感覺他是有錯誤但是卻沒報出來的感覺
然後開版的那種狀況一開始沒傳vm回view的狀況
改成有傳入vm回View
還有
<input type="text" name="QUERY_DATE" value="@Model.QUERY_DATE" />
應該就行了
補充一下
剛發現如果在Form裡面的話
使用
@Html.TextBoxFor(model => model.name)
Form裡和外面都有同樣的值
改其中一個值後PostBack
傳回來2個值都會改變成回傳前前端修改的值
其實不是錯誤
有點像是保存使用者輸入的機制
導致Form裡面會保存下來
Form外面的會刷新
<input value="@Model.QUERY_DATE" />
那我用的是
<td>
@Html.TextBoxFor(model => model.QUERY_DATE)
@Html.ValidationMessageFor(vm => vm.QUERY_DATE, "", new { })
</td>
因為我後面還有 ViewModel , Validate
new ValidationResult("時間格是不對,無法轉換日期。", new string[] { "START_DATE" });
不過您這個寫法,資料沒有在BeginForm 送到後Controller
TWLuke
因為你沒有name
<input type="text" name="QUERY_DATE" value="@Model.QUERY_DATE" />
不好意思我沒打完整應該還要個type