我正在研究我的「第一」MVC 3應用程序,並被以下問題困擾。基本上我有一個聯繫表單,收集輸入並保存到數據庫。在列出所有聯繫人提交的頁面上,我希望用戶(將來將成爲管理員角色)能夠從聯繫人列表頁面中選擇單個聯繫人,然後單擊「Make Client」調用我的ClientController並將此聯繫人轉換爲一個客戶。 ClientController頁面也有一個Create()方法來從頭開始輸入一個新的客戶端記錄,所以爲了避免該方法的複雜性,我試圖創建一個接受contactID作爲參數的「Make」操作。重寫Create()ActionResult?
我的聯繫人列表頁面上下面的代碼:
@Html.ActionLink("Make Client", "Make", "Client", new { id = item.ID }, null)
隨着客戶機控制器顯示爲這樣:
[HttpGet]
public ActionResult Create()
{
return View(new Client());
}
//
// GET: /Make
// used for converting a Contact record into a Client
[HttpGet]
public ActionResult Make(int contactID)
{
try
{
var contactModel = _db.Contacts.Single(r => r.ID == contactID);
var clientModel = new Client()
{
FirstName = contactModel.FirstName,
LastName = contactModel.LastName,
<snip> . . . ,
ZipCode = contactModel.ZipCode
};
return View(new Client(clientModel));
}
catch (Exception ex)
{
base.ViewData["Exception"] = "Exception: " + ex.InnerException.ToString();
throw;
}
}
的問題是,使用ContactID在對收到的(INT的ContactID)始終爲空。我已經能夠調整一些東西,得到以下工作通過調用標準創建一個可空的int參數()的ActionResult,但這種感覺做作:
[HttpGet]
public ActionResult Create(int? id)
{
if (id == null)
{
return View(new Client());
}
else
{
return (Make(id));
}
}
底線是,我可以把這個創建()ActionResult參數不爲null,但是當我直接調用Make()時,參數不會傳遞。有什麼特別的Create()使這項工作?
謝謝,我也願意接受其他的選擇。
Doh!謝謝,那就是訣竅。我想我並沒有意識到參數傳遞是如此直接與名稱相關。我還需要更改返回來調用創建視圖,現在正確地使用聯繫人的默認值填充。返回查看(「創建」,新客戶端(clientModel)); – djmarquette
猜猜我需要弄清楚如何正確格式化評論。
return View("Create",new Client(clientModel));
– djmarquette最後的評論 - 和更好的解決方案。我剛剛更改了預期現在具有
Make(int id)
的參數名稱。現在url是Client/Make/2而不是contactID = 2 – djmarquette