小弟又來擾民了正所謂不懂就問
小弟之前原先是寫C# WinForm的也有玩過一下下MAUI
只是說現在突然要碰MVC就有個小問題
//之前在winform下在button裡面可以直接寫程式碼
public int i = 1;
public void fun()
{
i++;
}
private void button1_Btn_Click(object sender, EventArgs e)
{
fun();
label1.text = i.ToString();
//label 顯示 2
}
在MAUI也可以
<button @oncheck=""></button>
可是到了MVC後@oncheck就沒辦法使用fun()的這個function
既使在裡面寫了一樣不行使用fun這個功能
@{
int i = 1;
void fun()
{
i++;
}
}
i++只是一個比喻
想請教該如何使用這項功能以及將其他的欄位變數帶進去
感謝
補充頁面是cshtml
從Webform換到MVC的時候,
其實整個思維架構都要重新理解過一次。
就我自己的理解,當你請求一個網址的時候,MVC會先經過你的Action,
然後才return view回去。
那你在view裡面寫的任何razor語法都是先在後端處理的,
全部處理完後才回傳到前端,
所以你寫的function,回傳到前端後就已經不存在了。(如有錯誤還請指教)
所以你之後想要再利用button呼叫那個function自然也就叫不到了。
如果是像這樣的function 最簡單的作法就是用直接用js去跑。
如果是很複雜的功能,就是用form直接去請求另一個action,
或是做一個api用非同步去呼叫json回來也行。
您好,非常感謝你的回答讓我我重新思考過他的架構差異
最終我使用了這個方法
onclick="location.href='@Url.Action("ActionName", "ControllerName")'"
可若是我的function裡面是
public void SQL(string SQLCommand)
{
SqlConnection dataConnection = new SqlConnection();
SqlCommand mySqlCmd = new SqlCommand(SQLCommand, dataConnection);
}
那我的應該怎麼把那串string帶入裡面
他似乎沒辦法使用
onclick="location.href='@Url.Action("SQL("string")", "ControllerName")'"
這樣的方法
Url.Action 最終是產生一串網址來呼叫,
所以要帶參數可以使用以下方法
'@Url.Action("ActionName", "ControllerName", new {SQLCommand = xxx})'
'@Url.Action("ActionName", "ControllerName")' + '?SQLCommand=xxx'
科科
感謝回覆,我成功了,若是可以用回答的話可以幫您設成最佳回答,另外想再請教要怎麼將表格內的資料傳到要輸出的字串裡
概念大概是這樣
string send = SqlString+textbox.Text;
以及使用@Url.Action時能否讓它不要讓視窗前往網頁只要運行功能就好
Juro十六
如果要將後端的值傳到前端的話可以利用model,
return view的時候,把你的值或是物件傳回到前端,
我通常習慣每一頁都會建一個ViewModel的class
public ActionResult Index()
{
ViewModel model = new ViewModel()
{
text = "something"
};
return View(model);
}
當你要使用回傳的值的時候就先在cshtml宣告model,
配合HtmlHelper就可以做資料綁定。
@model ViewModel
@Html.TextBoxFor(m => m.text)
第二點怕你有誤會,@Url.Action只是幫助你產生一串網址而已,造成postback的效果是location.href的關係,如果你是要做非同步的效果,應該要使用ajax等方法去呼叫action,讓action回傳json給前端處理才對。
沒關係喔,最佳解答給別人就好~
另外你要的效果應該如上面的回答,用ajax處理。
比較沒有純前端經驗的可能需要慢慢學一下,
除了Razor語法之外,簡單的html5基礎,與ajax語法,
也可以學一下,這樣對頁面功能的思考會比較靈活~
Index.cshtml
@{
int i = 0, j = 0;
i = 123;
j = Calculate(i);
}
@functions{
public int Calculate(int x) {
int result;
result = x * 2 + 5;
return result;
}
}
<div class="row">
<h2>
i=@i
</h2>
<h2>
j=@j
</h2>
</div>
i=123
j=251
提供一個寫法(blazor測試可行)
無參數 => <button type="button" @onclick="@test1">
有參數 => <button type="button" @onclick="() => test2(a)">
@code{
public async Task test1(){
await func();
}
public async Task test2(a){
await func(a);
}
}
最後由於轉跳這塊真的對js不熟悉所以用了以下方法
1.轉跳至頁面
<button type="button" class="btn btn-primary" onclick="location.href='@Url.Action("SQL", "Home", new {SQLCommand = string1+"'"+list.list1+"'"})'">確認</button>
2.轉跳後執行SQLs的Function
3.直接轉跳回MIS頁面
public IActionResult MIS()
=> View();
public IActionResult SQL(string SQLCommand)
{
SQLs(SQLCommand);
return Redirect("MIS");
}
public void SQLs(string SQLCommand)
{
SqlConnection dataConnection = new SqlConnection();
SqlCommand mySqlCmd = new SqlCommand(SQLCommand, dataConnection);
}
雖然感覺挺不正規的
但至少解決了一個問題
至於要如何把或的文字與string1做結合還在思考
如果是剛做的專案
可以玩玩看blazor或是aspnet core web
可以學到一些DI的用法